我可以回答我如何使用 MVVM 模式。
MVVM 在以下场景中表现更好:
1 如果多个控件与单个属性绑定。
MVVM:
<TextBlock x:Name="text1" Visibility="{Binding IsSomePropertyTrue, Converter={StaticResource VisibilityConverter}"/>
<TextBlock x:Name="text2" Visibility="{Binding IsSomePropertyTrue, Converter={StaticResource VisibilityConverter}"/>
我可以快速添加类似控件或删除现有控件。
与代码隐藏比较:
public string IsSomePropertyTrue
{
set
{
//...
text1.Visibility = value;
text2.Visibility = value;
}
}
2 代替多路转换器
公共画笔状态颜色
{
得到
{
if (this.State == State.Edited && this.IsPriority)
return new SolidColorBrush(Color.FromArgb(255, 0, 255, 0));
//...
}
}
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Background="{Binding StateColor}" Text="{Binding State}"/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
3 作为 ListBox 或 DataGrid 等控件中的项模型。例如,如果我想创建一个项目列表,每个项目附近都有一个删除按钮,我将创建一个 ItemView 控件和一个 ItemViewModel 类。
<ItemsControl ItemsSource="{Binding SomeItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<view:ItemView DataContext="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
4 将数据从一个视图复制到另一个视图:
public JournalEntryViewModel(SalesOrderViewModel vm) {}
5 ViewModel 可以继承 CLR 类并实现接口(INotifyPropertyChanged 或 INotifyDataErrorInfo)。
我还使用 MVVM 用命令或属性替换事件。并且使用 ViewModel 会强制通过可理解的名称调用属性。