将MainWindow实例传递给ViewModel

时间:2016-08-01 08:29:45

标签: wpf window viewmodel

在我的WPF应用程序中,我需要在ViewModel上使用我的MainWindow发送一些内容。所以我的想法是在代码隐藏中设置this.DataContext = new ViewModel (this),然后在视图模型的构造函数中,我可以使用我作为Window实例发送的'this'参数:

public ViewModel(Window Wndw){/../}

现在我需要做的是访问窗口内的'MainGrid'元素:

<Window bunch
        of
        stuff>
    <Grid x:Name="MainGrid">
    </Grid>
</Window>

但是当我尝试这样的事情时:

Grid MGrid = Wndw.FindName("MainGrid") as Grid

我没有得到任何错误,但它总是为空,所以当我尝试用MGrid做任何事情时,我一直得到Null Reference Exception。

另一方面, Wndw不为空,我对此进行了测试。而且,传递MainGrid而不是整个Window也不是一种选择。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

为什么要使用FindName方法?你可以这样做:

Grid MGrid = Wndw.MainGrid;

而不是在视图模型参数中给出窗口,你可以这样做:

// if the window you want is your main window
CustomWindow the_window = (CustomWindow )App.Current.MainWindow;

// if it's a secondary window
CustomWindow the_window = (CustomWindow )Window.GetWindow(your_view_model_object);
// for this, you have to check if the control is already loaded.