如何以编程方式从viewmodel中选择listview项?

时间:2012-03-29 22:43:08

标签: c# wpf mvvm

我有一个MVVM应用程序,MainWindowViewModel连接到MainWindow视图 在MainWindow视图中,我有ComboBox个包含股票代码的符号。

我有另一个名为AllStockQuoteViewModel的视图模型和视图连接到AllStockQuoteView,其中包含一系列股票及其价格。

我希望能够从ComboBox中选择一个项目,并选中并突出显示AllStockQuoteView中的项目。在MainWindowViewModel我已保存对AllStockQuoteViewModel的引用,并使用该方法调用方法查找ObservableCollection绑定到AllStockQuoteView的股票代码符号,但是避风港找不到以AllStockQuoteView为基础以编程方式选择项目的方法。

SelectedQuote上的AllStockQuoteViewModel属性绑定到AllStockQuoteView上的列表视图,我可以选择其中一个项目,我的SelectedQuote属性设置正常。如果我在我的SelectQuote方法中以编程方式设置此项,则看起来好像未在视图中选择该项目,尽管该项目会传回MainWindowViewModel并且我可以使用它来填充MainWindow视图上的文本块。

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

如何做到这一点?

2 个答案:

答案 0 :(得分: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属性,视图将更新。

答案 1 :(得分:0)

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

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

希望我能够提供帮助,

问候

相关问题