我正在初始化后面的代码中的用户控件,因为控件ctor将MainViewModel作为参数。我也有一个默认的ctor,以保持XAML的快乐。
现在,正如我所理解的那样 - XAML使用默认的ctor自动初始化用户控件,但是当我在代码背后重新启动它时 - 我可以看到这不起作用,因为我得到各种绑定错误。
XAML:
<childViews:SomeView x:Name="SomeViewUc"/>
XAML.cs:
public MainView(IMainViewModel mainViewModel)
{
InitializeComponent();
DataContext = mainViewModel;
SomeViewUc = new SomeView(new SomeViewModel(mainViewModel));
}
为什么新的初始化不起作用?有什么想法吗?
答案 0 :(得分:2)
您无法以这种方式替换现有控件...您需要从父控件中删除该控件并添加一个新控件。
但你有没有试过这样的东西?
public MainView(IMainViewModel mainViewModel)
{
InitializeComponent();
DataContext = mainViewModel;
SomeViewUc.DataContext = new SomeViewModel(mainViewModel);
}
您应该考虑实例化视图模型的其他方法,例如使用view model locator或直接在XAML中。我写了一篇关于视图模型实例化和其他最佳实践的blog article。