1. 程式人生 > >WPF MVVM後臺繫結沒有Command屬性的控制元件,繫結任何事件事件

WPF MVVM後臺繫結沒有Command屬性的控制元件,繫結任何事件事件

前言,我們在WPF開發中應用MVVM開發模式時,一般用來繫結Button 的Command命令,但是有很多控制元件MS沒有給出Command命令,我們需要新增一個DLL來增加繫結時的屬性。

下面來們來看一看。

本次測試有:TextBlock,Labe,TextBox三個 控制元件。

測試介面如下:

前臺程式碼:

<Window x:Class="NoCommandBingding.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
        xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style x:Key="Test_TextBox" TargetType="{x:Type TextBox}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Border x:Name="border" Width="Auto" Height="Auto" BorderThickness="1" BorderBrush="#FF7F9DB9">
                            <Grid x:Name="grid" Background="#FFFFFF">
                                <ScrollViewer x:Name="PART_ContentHost" VerticalAlignment="Center" HorizontalAlignment="Left"/>
                            </Grid>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <TextBlock Background="LightBlue" Text="我是一個Textbook 點選我" TextAlignment="Center" Margin="10" >
            <i:Interaction.Triggers>
                            <i:EventTrigger EventName="MouseLeftButtonUp">
                                <i:InvokeCommandAction Command="{Binding TextBlockCommand}" CommandParameter="{Binding ElementName=lb}" />
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
        </TextBlock>

        <Label Grid.Row="1" Background="LightYellow" Content="                                       我是一個lable 點選我"  Margin="10">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonUp">
                    <i:InvokeCommandAction Command="{Binding LabelCommand}" CommandParameter="{Binding ElementName=lb}" />
                </i:EventTrigger>
            </i:Interaction.Triggers> 
        </Label>
        
        <TextBox Grid.Row="2" Background="PaleVioletRed" Text="我是一個Textbox 點選我" TextAlignment="Center" Margin="10" >
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="GotFocus">
                    <i:InvokeCommandAction Command="{Binding TextBoxCommand}" CommandParameter="{Binding ElementName=lb}" />
                </i:EventTrigger>
            </i:Interaction.Triggers> 
        </TextBox>
    </Grid>
</Window>

加入一個程式集:

然後在前臺檔案引用:

有必要說明一下:

  xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
後面的像一個網路地 址的東西並不是去引用了一個網上的程式集,微軟只是作為一個名稱空間來存放程式集的引用,如此而已。

測試效果:

1.

2.

3.

最後奉上Demo

相關推薦

WPF MVVM後臺沒有Command屬性控制元件任何事件事件

前言,我們在WPF開發中應用MVVM開發模式時,一般用來繫結Button 的Command命令,但是有很多控制元件MS沒有給出Command命令,我們需要新增一個DLL來增加繫結時的屬性。 下面來們來看一看。 本次測試有:TextBlock,Labe,TextBox三個 控

WPF中TreeView控制元件資料後臺動態新增資料

資料繫結: TreeView資料繫結需要使用層次結構資料模板(HierarchicalDataTemplate)來顯示分層資料。XAML程式碼如下: <TreeView Name="chapterTree" Grid.Column="0"> <TreeVie

WPF不到父控制元件屬性

原因: 如果A控制元件並不是屬於visual tree的部分,那麼他不能連線到他父控制元件的datacontext,也就不能繫結到父控制元件的屬性 解決方案: 使用一個Freezable做代理 public class BindingProx

WPF概念基礎(四大組成方向觸發)

    本文為原創文章,可以轉載但不得商用,轉載必須註明來源。    今天講述的是一個關於WPF繫結的小例子,學習好WPF繫結,幾乎可以達到邏輯和介面完全隔離的神奇效果。    關於邏輯和介面是否可以完全可以隔離,我想告訴大家的是,如果學好了繫結機制和內部執行原理,是可以達到

ASP.NET中後臺資料和前臺控制元件

關於ASP.NET中後臺資料庫和前臺的資料控制元件的繫結問題最近一直在學習個知識點,自己建立了SQL Server資料庫表,想在ASP.NET中連線資料庫,並把資料庫中的資料顯示在前臺,注意,這裡的資料顯示不是使用asp.net自帶的資料顯示控制元件進行資料的繫結,而是使用開源的資料表格外掛DataTable

在Bootstrap開發框架中使用dataTable直接錄入表格行資料(2)--- 控制元件資料來源 在Bootstrap開發框架中使用dataTable直接錄入表格行資料

在前面隨筆《在Bootstrap開發框架中使用dataTable直接錄入表格行資料》中介紹了在Web頁面中使用Jquery DataTable外掛進行對資料直接錄入操作,這種處理能夠給使用者提供較好的資料錄入體驗,本篇繼續上篇的內容,繼續介紹這個直接錄入的處理操作,主要涉及到控制元件的初始化和資料來源的繫結等

WinForm—ComboBox控制元件資料

WinForm—ComboBox控制元件資料繫結 1、List< string > IList<string> list = new List<string>(); list.Add("上"); list.Add("下"); list.Add("左

ApolloStudio高手之路(6):用Python以極簡方式讀寫OPC DA、OPC UA資料並實現UI控制元件自動重新整理顯示

OPC(OLE for Process Control, 用於過程控制的OLE)是一個工業標準,OPC是為了連線資料來源(OPC伺服器)和資料的使用者(OPC應用程式)之間的軟體介面標準。資料來源可以是PLC,DCS,條形碼讀取器等控制裝置。隨控制系統構成的不同,作為資料來源的OPC伺服器既可以

C# .NET treeView(樹形控制元件資料的通用方法 (精)

DataTable dtCangKu = new DataTable(); //定義一張新表 BLL基礎資料.frm_CangKuZiLiao.frm_CangKuZiLiaoClient myfrm_CangKuZiLiaoClient = new BLL基礎資料.frm

在Bootstrap開發框架中使用dataTable直接錄入表格行資料(2)--- 控制元件資料來源

在前面隨筆《在Bootstrap開發框架中使用dataTable直接錄入表格行資料》中介紹了在Web頁面中使用Jquery DataTable外掛進行對資料直接錄入操作,這種處理能夠給使用者提供較好的資料錄入體驗,本篇繼續上篇的內容,繼續介紹這個直接錄入的處理操作,主要涉及到控制元件的初始化和資料來源的繫結等

C# Combox控制元件如何自定義資料

建立一個Combox控制元件為cbxSelectPilot,載入指定目錄中的檔名到cbxSelectPilot中di = new DirectoryInfo(defaultPilotParFolder);            fileInfo = di.GetFiles("

.NET控制元件ComboBox資料來源的一個Bug及解決方法

ComboBox常用於繫結到一個數據源表的某個欄位,提供選擇並更新功能。下面用具體例項介紹它的一個Bug及解決辦法。 1、演示Bug的程式碼 窗體Form1上有組合框comboBox1和一個顯示資料表字段的按鈕button1,演示程式碼如下: priva

章魚哥—VB.NET 如何實現程式碼自動生成控制元件 新增事件

這個問題其實非常簡單,我看到網上也有很多的例子,大家只要一搜就會明白。 但是我在這裡試圖比較詳細的介紹自動生成控制元件的步驟'**************************************************************************

dropdownlist控制元件如何動態資料

一、dropdownlist控制元件的值繫結方法: 1、直接輸入item項 <asp:DropDownList ID="DropDownList1" runat="server" >  <asp:ListItem>張三</asp:ListItem>  <asp:Li

asp.net動態生成控制元件併為控制元件事件

1.動態查詢控制元件的例子:         //查詢控制元件         Image img = (Image)Page.FindControl("Image1");         //設定圖片資源         img.ImageUrl = "~/image/p

VS無法正常載入Wpf後臺重新整理ui的自定義控制元件

今天,在用wpf製作一個UserControl被其他控制元件載入呼叫時遇到了一個問題,現在分享出來,給以後遇到這個問題的人解惑。 問題:就是這裡使用了一個自定義控制元件,該控制元件中在Load函式採用了後臺執行緒Backgroundworker來重新整理UI控

WPF查詢指定型別名的控制元件超簡單的方法

WPF查詢指定型別名的控制元件,超簡單的方法 /// <summary> /// 從當前控制元件開始,查詢指定型別名的控制元件 /// </summary> /// <param name="obj">當前控制元件</param> //

VS程式設計編輯WPF過程中點選設計器中介面某一控制元件在XAML中高亮突出顯示相應的控制元件程式碼的設定方法。

在編輯製件WPF過程中,當介面中控制元件較多時,可通過點選設計器中具體的控制元件,從而中在xaml程式碼視窗中快速跳轉到對應的部分。為了突出顯示該部分控制元件程式碼的名稱,方便視覺上直觀的觀察到被選中的控制元件對應的XAML程式碼,可以在VS中設定:選中控制元件後,高亮顯示對應的XAML

正確收到Qt屬性控制元件中輸入框訊息

QtPropertyBrowser2.5中的字串屬性對應的修改方式是一個輸入框,OnValueChange是在每次鍵入字元時傳送一次.這個對於編輯器需要的邏輯來說是一種災難. Ogitor修改了其原始碼,解決了這個問題: qteditorfactory.h 中 QtLineEditFactory類新增

C# Dev控制元件中的 PropertyGridControl 屬性控制元件的基本用法以及排序

在這個例子中將實現讓該屬性控制元件實現排序按鈕。 效果如圖: 首先2個按鈕是 CheckButton 控制元件。 然後是一個:PropertyGridControl  控制元件 為了美觀一點,將2個CheckButton控制元件的AllowFocus屬性設定為 False --------------