0

我一直在处理简单的 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 绑定到 ViewModelBase 的 ObservableCollection<>,并引用添加的每个基的 Image 属性(图像导航)。现在!对于问题:

我使用 DataTemplate 从 ViewModel 引用视图,使用从 ListBox.SelectedItem 返回的字符串。因为 RandomViewModel 需要传递一个参数,所以每当我单击 ListBox.SelectedItem 时,都会实例化一个新视图,而不是在 ListBox 中创建的视图。发生这种情况的原因很简单,新视图需要一个 RandomViewModel 来引用数据绑定。所以!使用臭名昭著的 ListBox.SelectedItem 进行 ViewModel/View Navigation,我应该如何创建 View,并且仍然引用它的 ViewModel,即使 ViewModel 需要传递参数?或者!我应该如何使用已经实例化的 ViewModel 并将其用作对新创建的 View 的引用?

4

1 回答 1

1

我不明白为什么每个人都先用视图做 MVVM。我首先将视图用于根/主窗口,也许还有登录对话框。对于应用程序的其余部分,我根本不关心视图/xaml,而是采用Viewmodel 第一种方法。使用 mvvm 就容易多了。在您的情况下,您的 mainviewmodel 像您一样处理 randomviewmodel 列表。但现在无需创建随机视图并分配随机视图模型,您只需将选定的随机视图模型绑定到内容演示器。wpf 将查看您的资源以找到“我应该如何渲染此随机视图模型”的数据模板,然后您会看到所需的视图。每次创建视图的新实例时,您都会使用相同的视图模型。

这就是 mvvm 对我的意义:不要关心您的视图,只需正确处理您的视图模型。

于 2012-07-04T06:26:41.890 回答