WPF MVVM 如何在ViewModel中操作View中的控件事件


(在學習Wpf的時候,做一個小例子,想在TextBox改變后,檢驗合法性,並彈出提示。在找了很多貼后,發現這個小例子,抄襲過來,僅供參考。

最后也找到了適合自己例子的辦法:在出發TextChanged后,做出提示(提示可以根據要求來寫),見最后。)

 

雖然說MVVM模式下不建議在Viewmodel層中操控View層中控件,但是在某些情況下,比如想要得到某個事件的參數,在Viewmodel層中不太方便實現,這時候就可以用下面的方法了。

在XAML中

1、引用組件並設置

xmlns:Interaction="http://schemas.microsoft.com/expression/2010/interactions"

xmlns:Interactivity="http://schemas.microsoft.com/expression/2010/interactivity"

 

2、DataContext設置

xmlns:VM="clr-namespace:MVVM_.ViewModel"

<Window.DataContext>        

<VM:MainWindowViewModel /> < /Window.DataContext>

 

3、事件觸發,以窗口的大小改變事件為例  SizeChanged

<Interactivity:Interaction.Triggers>        

<Interactivity:EventTrigger EventName="SizeChanged">            

<Interaction:CallMethodAction TargetObject="{Binding}" MethodName="SizeChangedCommand"/>        

</Interactivity:EventTrigger>

< /Interactivity:Interaction.Triggers>

 

在Viewmodel中

public class MainWindowViewModel

 {public void SizeChangedCommand(object obj, SizeChangedEventArgs e){}}

 

最后找出一中合適我測試所需要的,具體如下:

1、xaml中添加引用:

xmlns:ie = "http://schemas.microsoft.com/expression/2010/interractivity"

2、TextBox 代碼:

<TextBox Text="{Binding xxx,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<ie:Interaction.Triggers>
 <ie:EventTrigger EventName="TextChanged">
        <ie:InvokeCommandAction Command = "{Binding TextChangedCommand}" CommandParametes="xxxx" />
         </ie:EventTrigger >
</ie:Interaction.Triggers>
</TextBox>

大致意思是用Action和Invoke之類的。

EventName="TextChanged"  是TextBox中的事件,可以更換成自己需要的事件。

3、在后定義委托...(請參照上一篇代碼)

4、如果是傳窗體(Window)或者按鈕Button,用ElementName,如下:

  xaml代碼:

<Button x:Name="btnSendButInfo" Width="100" Command="{Binding BtnClickCommand}"
CommandParameter="{Binding ElementName=btnSendButInfo}" />

  ViewModel:

  private DelegateCommand<Button> BtnClickCommand; //申明委托

  BtnClickCommand = new DelegateCommand<Button>(BtnClick); //實例化

  private void BtnClick(Button btn)

  {

    string strBtnName =  btn.Name;//使用

  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM