当前位置 : 主页 > 编程语言 > c语言 >

c# – 多个视图的相同命令

来源:互联网 收集:自由互联 发布时间:2021-06-25
我有两个相同的视图View1.xaml和View2.xaml,它们都有一个按钮button1和一个textfield textfield1.我们的想法是,当您按下按钮时,相应的文本字段会填充一些信息.两个视图都使用相同的方法填充文本
我有两个相同的视图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类,但由于并非每个视图都具有此功能,因此我无法使用此方法实现它.

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

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

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

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

网友评论