在我的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也不是一种选择。
有什么想法吗?
答案 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.