2012-03-29 98 views
1

我有一个连接到MainWindow视图的MainWindowViewModel的MVVM应用程序。
在MainWindow视图中,我有一个包含股票代码的符号的组合框。如何在编程中从视图模型中选择列表视图项目?

我有另一个viewmodel和视图称为AllStockQuoteViewModel连接到AllStockQuoteView其中包含股票及其价格清单。

我希望能够从组合框中选择一个项目,并选择并突出显示AllStockQuoteView中的项目。在我的MainWindowViewModel上,我保存了对AllStockQuoteViewModel的引用,并使用它调用一个方法来查找绑定到AllStockQuoteView的ObservableCollection中的股票代码符号,但还没有找到以编程方式在AllStockQuoteView上选择该项的方法。

我在AllStockQuoteViewModel上绑定了AllStockQuoteView上的ListView,并且我可以选择其中一个项目,并且我的SelectedQuote属性设置正常。如果我在SelectQuote方法中以编程方式设置此选项,它不会显示为在视图中选中该项目,尽管该项目被传回到MainWindowViewModel,我可以使用它来填充MainWindow视图上的文本块。

我希望能够显示AllStockQuoteView上的项目是通过突出显示来选择,就好像用户选择了它一样。

这怎么办?

回答

0

首先你必须考虑你的模型和整个MVVM方法,一个好的起点是http://blogs.msdn.com/b/kashiffl/archive/2010/11/14/mvvm-technical-description.aspx

通过不同的方式实现您的功能之后,可能会执行类似Observer Pattern的事情,或尝试使用类似Notify Property-Changed-Events的方法。

希望我能帮忙,

问候

+0

谢谢,我会检查这些项目并评估我的设计。但我仍然有一个基本的问题,MVVM视图模型如何以编程方式在视图中选择一个项目? – JohnBlacker 2012-03-29 23:08:34

+0

检查这个问题出来http://stackoverflow.com/questions/803216/managing-multiple-selections-with-mvvm - 我认为它会帮助你解决你的问题。 – 2012-03-30 00:30:00

3

它很容易实现

您需要在您的视图模型 两件事情你的对象的列表和选择的项目属性

 private CustomObject _selectedCustomObject; 

     public ObservableCollection<CustomObject> CustomObjects 
     { 
      get 
      { 
       return new ObservableCollection<CustomObject>(); 
      } 
     } 

     public CustomObject SelectedCustomObject 
     { 
      get { return _selectedCustomObject; } 
      set 
      { 
       if (_selectedCustomObject== value) 
       { 
        return; 
       } 

       _selectedCustomObject= value; 
       PropertyChanged.Raise(this, x => x.SelectedCustomObject); 
      } 
     } 

然后在您的视图中添加您的List/Combo控件并绑定到两个属性。

<ListView ItemsSource="{Binding CustomObjects}" 
      SelectedItem="{Binding SelectedCustomObject}"> 

然后,您只需设置viewmodel属性并更新视图即可。

+0

上面的代码的问题是,每次它检索CustomObjects集合时,它会创建一个新的摧毁它之前的任何内容...我最终没有任何显示... – JohnBlacker 2012-03-30 00:10:01

+0

是的,您可以实现这两个属性你如何看待健康。我为了一个例子使用它,你可以像选择的项目一样返回一个私有变量。 (我为这个例子修改的原始代码,从模型中为数据存储中的更新列表做了一个请求,而不是静态列表)。你原来的问题主要是关于选定的项目。我没有提到,无论您分配给选定的项目属性,都必须位于对象列表(引用匹配)中。 – 2012-03-30 00:38:37