在不工作的代码中初始化用户控件 - MVVM WPF

时间:2015-03-18 18:16:35

标签: c# wpf xaml mvvm

我正在初始化后面的代码中的用户控件,因为控件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)); 
}

为什么新的初始化不起作用?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您无法以这种方式替换现有控件...您需要从父控件中删除该控件并添加一个新控件。

但你有没有试过这样的东西?

public MainView(IMainViewModel mainViewModel)
{
    InitializeComponent();

    DataContext = mainViewModel;
    SomeViewUc.DataContext = new SomeViewModel(mainViewModel); 
}

您应该考虑实例化视图模型的其他方法,例如使用view model locator或直接在XAML中。我写了一篇关于视图模型实例化和其他最佳实践的blog article