C# ViewModel中的GetView()vs属性
当前,当某个事件(C# ViewModel中的GetView()vs属性,c#,wpf,mvvm,caliburn.micro,C#,Wpf,Mvvm,Caliburn.micro,当前,当某个事件(IEventAggregator)发生时,我需要设置TabControl的SelectedIndex属性,并考虑如何实现它 我提出了两种可能性: 使用ViewAware提供的GetView()访问my TabControl并将SelectedIndex设置为my value 在关联的ViewModel中使用属性,并通过XAML将此属性绑定到TabControl的SelectedIndex属性 这两个选项都很好,但我个人想回答这个问题,因为这不是我第一次想知道在这种情况下在哪
IEventAggregator
)发生时,我需要设置TabControl的SelectedIndex
属性,并考虑如何实现它
我提出了两种可能性:
- 使用
提供的ViewAware
访问my TabControl并将SelectedIndex设置为my valueGetView()
- 在关联的ViewModel中使用属性,并通过XAML将此属性绑定到TabControl的SelectedIndex属性
GetView()
方法直接从viewmodel操作视图完全破坏了MVVM。你最好把你所有的逻辑都放在代码后面。MVVM的全部目的是抽象出实际的视图,以便将其与逻辑解耦,并且可以对应用程序进行单元测试
如果您将来改变了对选项卡的看法,并决定以其他方式显示多个视图,该怎么办?现在,您必须开始编辑viewmodel来编辑新视图,而不仅仅是调整一些XAML
对于单元测试,您将无法模拟TabControl。我通常将选项卡作为模型从VM中公开,并在VM上具有SelectedItem属性。将tab控件的ItemsSource绑定到集合,并在VM上选择EdItem以将其绑定到该集合。对,我也是如此。然而,我认为当我们通过GetView方法访问控件时,我们最终会得到更少的代码。我只是不确定这是否是一个好方法。因此,您想知道是否应该将代码移到ViewModel中:|它实际上不是代码隐藏,因为我在ViewModel中操作。但是是的,我们越来越近了。就这样,谢谢。我完全忘记了抽象概念!