我已将View的数据上下文设置为后面的View代码中与之关联的ViewModel。但在阅读a question on the MVVM pattern,后,建议将此胶水代码移至View的XAML标记处。
谷歌搜索向我展示了在XAML中设置上下文的示例,by setting a namespace to the VM and setting data context.
虽然在我的情况下,MainViewModel采用CustomerRepository实例的参数,我不确定如何在XAML中设置,基于前面的示例。
有谁知道如何将数据上下文移动到View的XAML?
这就是我目前在C#中设置View代码的方式:
public partial class MainView : Window
{
private MainViewModel ViewModel { get; set; }
public MainView()
{
InitializeComponent();
ViewModel = new MainViewModel(CustomerRepository.Instance);
this.DataContext = ViewModel;
}
}
答案 0 :(得分:1)
您可以在xaml中实例化您的视图模型,如下所示:
<Window x:Class="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test"
xmlns:viewModel="clr-namespace:ViewModels">
<Window.DataContext>
<viewModel:ExampleViewModel/>
</Window.DataContext>
</Window>
您解释过您的视图模型构造函数具有存储库的参数。你需要这个构造函数用于单元测试吗?
通常,您可以在视图模型的无参数构造函数中新建存储库实例。
public class MainViewModel : ObservableObject, INotifyPropertyChanged
{
private static CustomerRepository _customerRepository;
// existing constructor
public MainViewModel(CustomerRepository customerRepository)
{
_customerRepository = customerRepository;
}
// new parameterless constructor
public MainViewModel(CustomerRepository customerRepository)
{
if (DesignerProperties.GetIsInDesignMode(this))
{
_customerRepository = new CustomerRepository();
}
}
}
检查是否处于设计模式
在xaml中创建视图模型时还需要考虑一件事:在打开视图时,在设计时调用视图模型构造函数。 所以你需要在构造函数中包含任何代码,这些代码在设计时没有任何意义,只能在“仅在非设计时”条件下。 如果您不这样做,您的视图将在设计器中显示错误。
在此回复中对此进行了解释:Check if in design mode