Wpf MVVM——命令绑定和消息发送
程序员文章站
2022-06-07 15:13:55
...
开发工具与关键技术:Visual Studio 2015、MVVM
作者:何德润
撰写时间:2020.8.9
View就是用xaml实现的界面,负责与用户交互,接收用户输入,把数据展现给用户。
ViewModel是一个C#类,负责收集需要绑定的数据和命令,聚合Model对象,通过View类的DataContext属性绑定到View,同时也可以处理一些UI逻辑。
Model,就是系统中的对象,包含一些属性和行为。
命令绑定
在按钮中绑定一个命令:
Xaml界面代码:
<Button Command="{Binding AddECUCommand}">确定</Button>
ViewModel 代码:
private RelayCommand addCommand;
public RelayCommand AddCommand
{
get
{
if (addCommand == null)
addCommand = new RelayCommand(() => ExcuteAddCommand());
return addCommand;
}
set { addCommand = value; }
}
//方法
private void ExcuteAddCommand()
{
}
用命令绑定ComboBox的值改变事件
Xaml界面代码:
<ComboBox Name="listComboBox">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<mvvm:EventToCommand Command="{Binding SelectingCommand }" CommandParameter="{Binding ElementName=listComboBox, Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
CommandParameter传递参数
注:要在页面引用
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:mvvm=http://www.galasoft.ch/mvvmlight
ViewModel 代码:
private RelayCommand<AffirmResponseMessageModel> selectingCommand;
public RelayCommand<AffirmResponseMessageModel> SelectingCommand
{
set { selectingCommand = value; }
get
{
if (selectingCommand == null)
selectingCommand = new RelayCommand<AffirmResponseMessageModel>((p) => ExecuteSelectingCommand(p));
return selectingCommand;
}
}
//执行方法
private void ExecuteSelectingCommand (AffirmResponseMessageModel affirmResponseMessageData)
{
}
MVVM框架的消息通知机制用于View和ViewModel 或 ViewModel和ViewModel 之间的消息通知和接收。
例如:在A页面的ViewModel发送信息到B页面的code-behind页面关闭B页面
A页面的ViewModel代码
private void ExecuteCommand()
{
Messenger.Default.Send<String>("1", "123");//"1"为参数,"123"为消息标识。
}
B页面的code-behind里面接收消息
public partial class B : Window
{
public B ()
{
InitializeComponent();
//接收关闭窗体信息
Messenger.Default.Register<string>(this, "123", CloseDialog);
}
/// <summary>
/// 关闭窗体
/// </summary>
private void CloseDialog(string msg)
{
this.Close();
}
}
在A页面的ViewModel发送信息到B页面的ViewModel
A页面的ViewModel
private void ExecuteCommand()
{
Messenger.Default.Send<String>("1", "123");//"1"为参数,"123"为消息标识。
}
B页面的ViewModel
public class BViewModel:ViewModelBase
{
public BViewModel()
{
//接收信息
Messenger.Default.Register<BaseModel>(this, "123", UpdateDataModel);
}
//方法
Private void UpdateDataModel(string msg){
}
}
上一篇: java 去掉时间中的T