【发布时间】:2020-03-01 15:13:44
【问题描述】:
我正在开发一个演示 MVVM 项目,其中我有一个带有 ViewModel 的 WPF MainWindow,它需要协调不同 UserControls 的创建和托管。如果 ViewModel 不应该包含 WPF 元素的任何部分,我不知道该怎么做。我知道这是一个相当广泛的设计问题,但我是 WPF/TDD 的新手,我很难找到一条清晰的路径来了解如何在没有一些创建和绑定代码的情况下创建 UserControl 并将其绑定到 ViewModel ViewModel。
从我读到的内容来看,在 MainViewModel 中公开一个绑定到 ContentControl 的 UserControl 属性并不是要走的路。如何在 MainView 模型中抽象出 UserControls 的创建和绑定,以便进行测试?
有效但不可测试:
<ContentControl Grid.Row="2" Content="{Binding UserControl}" />
public class MainWindowViewModel
{
public void ShowHome()
{
SomeUserControl uc = new SomeUserControl();
uc.DataContext = new SomeUserControlViewModel();
UserControl = uc;
}
public void ShowKeypad()
{
SomeOtherUserControl uc = new SomeOtherUserControl();
uc.DataContext = new SomeOtherUserControlViewModel();
UserControl = uc;
}
public UserControl UserControl {get; private set;}
}
【问题讨论】: