加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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类,但由于并非每个视图都具有此功能,因此我无法使用此方法实现它.

解决方法

您的两个视图模型不是使用“基础”视图模型和两个派生视图模型,而是使用在别处定义的相同代码(理想情况下,两者都调用相同的接口,注入依赖注入).

这是基于继承的组合原则.

在编写测试时,测试两个视图模型都调用接口,并测试该接口的实现是否完成了它应该执行的操作.

这样,您不仅可以避免两次编写代码,还可以避免两次测试,还可以遵循单一责任原则等其他原则.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读