1.写一个命令处理函数要写一大堆的花花架子,例如
1 public ICommand WindowCloseCommand 2 { 3 get 4 { 5 return new RelayCommand(() => 6 { 7 //这里才是自己的代码,外面嵌套的太罗嗦了 8 } 9 ); 10 } 11 }
2.写Model类
1 private string money; 2 3 public string Money 4 { 5 get { return money; } 6 set { money = value; RaisePropertyChanged(() => Money); } 7 }
3.xaml命令比较臃肿
1 <i:Interaction.Triggers> 2 <i:EventTrigger EventName="MouseMove"> 3 <i:InvokeCommandAction Command="{Binding xxxCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" /> 4 </i:EventTrigger> 5 </i:Interaction.Triggers>
4.界面涉及复杂的元素操作,例如焦点相关的获取,失去,新开窗体什么的都比较麻烦。有没有那个框架封装度比较高的,能解决这些问题。例如vue的双向绑定就很简约。
相关问题
- VNC control for WPF application
- WPF Binding from System.Windows.SystemParameters.P
- XAML: Applying styles to nested controls
- How can I add a horizontal line (“goal line”) for
- How to properly change a resource dictionary
Button_Click
MouseMove需要事件转命令,按钮啥的并不需要这么麻烦。我们都没用过什么框架,自己稍微封装了下。
事件绑定命令确实代码冗余,可以试试自定义Behavior或MarkupExtension,这是源代码:https://github.com/LeoYang-Chuese/wif ,比Blend的方式要简单。
第一种:EventToCommandBehavior。
第二种:EventBindingExtension。
问题尖锐奥,插眼
没错,即使使用了 mvvm 框架,该模式还是显得繁琐,mvvm 模式很重要的优点是单元测试,如果项目小,其实没啥使用的必要,爱怎么写怎么写。
不过还是有解决方法的!
Q:如何消除 Model 中繁琐的属性通知代码?
A:使用 Fody 旗下的 Fody/ropertyChanged
基本使用方法:在 Model 类名上添加 [AddINotifyPropertyChangedInterface] 特性,该类的所有属性便全部拥有了通知功能。
Q:如何消除命令模式前后端的繁琐代码?
A:mvvm 框架 Caliburn.Micro 也许能帮你,该框架与 mvvmlight 不同,它基于名称约定,也就是说,如果你有个名为 “GetData” 的按钮,vm 中有个名为 “GetData()” 的方法,那么这个按钮就自动将命令绑定到了 GetData() 方法。
另一个推荐的 mvvm 框架是 Stylet,它是由 Caliburn.Micro 改造而来,提供了更多简化操作。
补充推荐一个 mvvm 框架:Catel,也具有自动映射从模型到视图模型的功能。
以上具体使用方法,可以自行搜索教程。