c# – 多个视图的相同命令
发布时间:2020-12-16 01:27:15 所属栏目:百科 来源:网络整理
导读:我有两个相同的视图View1.xaml和View2.xaml,它们都有一个按钮button1和一个textfield textfield1.我们的想法是,当您按下按钮时,相应的文本字段会填充一些信息.两个视图都使用相同的方法填充文本字段(在这种意义上,视图完全相同). 我的问题是:如何使用OOP原
我有两个相同的视图View1.xaml和View2.xaml,它们都有一个按钮button1和一个textfield textfield1.我们的想法是,当您按下按钮时,相应的文本字段会填充一些信息.两个视图都使用相同的方法填充文本字段(在这种意义上,视图完全相同).
我的问题是:如何使用OOP原则编写通用代码而不破坏MVVM模式?我目前使用RelayCommand执行此操作的方法: ViewModel1和ViewModel2的代码相同: public RelayCommand ButtonCommand { get; private set; } #Constructor ButtonCommand = new RelayCommand(ExecuteButtonCommand,CanExecuteButtonCommand); #EndConstructor private void ExecuteButtonCommand(object message) { //Some method to fill the corresponding textfield } private bool CanExecuteButtonCommand(object message) { return true; } 绑定View1.xaml和View2.xaml中的按钮: <Button Command="{Binding Path=ButtonCommand,Mode=OneWay}" /> 这很糟糕,因为我必须为两个ViewModel编写相同的代码.我试图创建一个继承自RelayCommand的ButtonCommand类,但由于并非每个视图都具有此功能,因此我无法使用此方法实现它. 解决方法
您的两个视图模型不是使用“基础”视图模型和两个派生视图模型,而是使用在别处定义的相同代码(理想情况下,两者都调用相同的接口,注入依赖注入).
这是基于继承的组合原则. 在编写测试时,测试两个视图模型都调用接口,并测试该接口的实现是否完成了它应该执行的操作. 这样,您不仅可以避免两次编写代码,还可以避免两次测试,还可以遵循单一责任原则等其他原则. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |