我有一个控件,我需要在Options对话框中使用两次,但我需要以某种方式保持并知道每个控件的状态。该控件有几个复选框,一些“实体”必须知道在哪个控件中检查了哪些。
我尝试了两种方法 - 让每个控件都有自己的VM,并且两者都使用一个VM。后一种方法对我没有意义 - 我有一个网格可见性绑定到VM上的属性 - 那么哪个网格将被禁用?控制A或控制B上的那个?前一种方法(每个控件都有自己的VM)适用于UI的问题,但我需要一些类来了解每个控件状态。
我想过为每个人配备一台虚拟机,但让他们共享一个模型?因此,为两者传递相同的模型,并且模型将保持两者的状态?但就MVVM方法而言,模型承担这种责任是否可以接受?
答案 0 :(得分:0)
'州'应用程序或特定视图/表单/窗口来自数据。在MVVM中,状态通常来自视图模型。因此,要在两个(或更多)窗口/控件/视图/等之间共享状态,您只需共享数据。
一种可能性是共享相同的视图模型,另一种可能是克隆'视图模型,例如。共享视图模型的副本。但是,根据您的描述,您的视图模型似乎将属性而不是视为数据'。
因此,创建一个包含您调用的所有属性' data'的类是有意义的。然后,在两个单独的视图模型中创建新类类型的属性并将数据绑定到同一对象是一件简单的事情。举个简单的例子:
在两种视图模型中:
public YourNewDataType Model
{
get { return model; }
set { if (value != model) { model = value; NotifyPropertyChanged("Model"); } }
}
初始化视图模型:
viewModel1.Model = viewModel2.Model = new YourNewDataType();
视图中的数据绑定:
<TextBox Text="{Binding Model.SomePropertyInYourNewDataType}" ... />