我一直在处理简单的MVVM模式,并且已经更多地深入研究了WPF中数据绑定的全部功能。我遇到了一个问题,我似乎无法解决这个问题。对于初学者,请使用以下MainWindowViewModel代码:
ObservableCollection<DataRecord> _SomeData = new ObservableCollection<DataRecord>();
public ObservableCollection<DataRecord> SomeData
{
get
{
return _SomeData;
}
set
{
_SomeData = value;
}
}
public MainWindowViewModel()
{
CurrentViewModel.Add(new RandomViewModel(SomeData));
}
我没有粘贴全部代码,而是将ListBox绑定到ObservableCollection&lt;&gt; ViewModelBase,引用添加的每个基础的Image属性(图像导航)。现在!对于这个问题:
我正在使用DataTemplate从ViewModel引用View,使用从ListBox.SelectedItem返回的字符串。因为RandomViewModel需要传递参数,所以每当我单击ListBox.SelectedItem时,都会实例化一个新的View而不是ListBox中创建的View。发生这种情况的原因很简单,新的View需要一个RandomViewModel来引用数据绑定。所以!使用臭名昭着的ListBox.SelectedItem用于ViewModel / View Navigation,我应该如何创建View,并仍然引用其ViewModel,即使ViewModel需要传递参数?要么!我应该如何使用已经实例化的ViewModel并将其用作新创建的View的引用?
答案 0 :(得分:1)
我不明白为什么每个人都先用视图做MVVM。我首先使用视图只是为root / mainwindow,也许是一个登录对话框。对于应用程序的其余部分,我根本不关心view / xaml并采用 Viewmodel第一个方法。使用mvvm这样容易得多。在您的情况下,您的mainviewmodel像您一样处理randomviewmodel的列表。但现在不必创建随机视图并分配randomviewmodel,只需将seleced randomviewmodel绑定到contentpresenter即可。 wpf会查看你的资源,找到一个数据模板“我应该如何渲染这个randomviewmodel”,你会看到你想要的视图。每当创建一个新的视图实例时,你都会看到,但总是采用相同的视图模型。
那就是mvvm对我来说:不关心你的观点只是处理你的视图模型。