如何为两个视图使用相同的ViewModel?

时间:2019-03-10 17:19:47

标签: c# .net wpf mvvm data-binding

所以我有MainWindow.xaml,它的BaseViewModel的DataContext是这样设置的。

<Window.DataContext>
    <viewModel:BaseViewModel/>
</Window.DataContext>

它工作正常,例如,当我在ListView中选择一个项目时,它将绑定并更新MainWindow中的ImageView。

<ListView Background="Transparent"
          ItemsSource="{Binding ImageGridViewModel.Images}"
          SelectedItem="{Binding ImageGridViewModel.SelectedImage}">

然后它像这样更新

    <Image Source="{Binding ImageGridViewModel.SelectedImage}"
           Margin="20">

完美无缺。

但是,我最近添加了第二个视图,名为Window的{​​{1}},就像在XAML中那样设置WatermarkWindow就像在MainWindow中一样。 >

DataContext

然后在该新<Window.DataContext> <viewModel:BaseViewModel/> </Window.DataContext> 上绑定Image控件

Window

但是,当我打开该窗口时,<Image Source="{Binding ImageGridViewModel.SelectedImage}" Margin="20"> 控件的源未绑定到属性,该属性实际上返回了Image,我想我知道为什么,我认为这是因为在我的{ {1}}每当调用该ViewModel时都会实例化一个NULL实例。

之所以这样做,是因为我想实例化它的一个实例,这样我才能实际使用它来绑定东西。而不是它为空。

如果这不是问题所在,那么我仍然非常渴望学习和理解问题所在。 设置包含所有额外ViewModel的BaseViewModel的正确方法是什么?

new

和ObservableObject

BaseViewModel

没关系,因为我知道属性可以正常工作,这里是ViewModel。

public class BaseViewModel : ObservableObject
{
    public ImageGridViewModel ImageGridViewModel { get; set; } = new ImageGridViewModel();
}

0 个答案:

没有答案