2012-07-03 38 views
0

我一直在处理简单的MVVM模式,并从此更多地深入了解WPF数据绑定的全部功能。我遇到了一个问题,我似乎无法将我的头围绕。采取以下MainWindowViewModel代码起动器:WPF MVVM多视图问题,使用ListBox.SelectedItem

ObservableCollection<DataRecord> _SomeData = new ObservableCollection<DataRecord>(); 
public ObservableCollection<DataRecord> SomeData 
{ 
    get 
    { 
     return _SomeData; 
    } 
    set 
    { 
     _SomeData = value; 
    } 
} 

public MainWindowViewModel() 
{ 
    CurrentViewModel.Add(new RandomViewModel(SomeData)); 
} 

相反粘贴的代码的全部长度,我已绑定列表框来ViewModelBase的一个ObservableCollection <>,参照每个碱基添加(图像导航)的图像属性。现在!对于问题:

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

+0

我真的不明白你有什么。 – MBen

+0

我以为这个问题有足够的重量,我猜不是!你错过了什么可以帮助回答这个问题? – user1280092

回答

1

我不明白为什么每个人都先做MVVM。我首先使用视图仅用于根/主窗口,也许是登录对话框。对于应用程序的其余部分,我根本不关心view/xaml,并采取Viewmodel首先的方法。这对于mvvm来说非常简单。在你的情况下,你的mainviewmodel像你一样处理randomviewmodel的列表。但现在不必创建随机视图并分配randomviewmodel,只需将选定的randomviewmodel绑定到contentpresenter即可。 wpf会查看你的资源,找到一个数据模板来“我应该如何呈现这个randomviewmodel”,并且你看到你想要的视图。每次创建视图的新实例时,都会收到相同的视图模型,但始终采用相同的视图模型。

这就是mvvm对我来说:不关心你的意见只是处理你的viewmodels的权利。