如何通过程序从视图模型中选择列表视图项

本文关键字:视图 选择 列表 模型 程序 何通过 | 更新日期: 2023-09-27 18:29:23

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

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

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

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

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

如何做到这一点?

如何通过程序从视图模型中选择列表视图项

实现非常容易

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

        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/Compo控件并绑定到这两个属性。

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

然后,您只需要设置视图模型属性,视图就会更新。

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

在您可以通过不同的方式实现您的功能后,一种方法是实现类似Observer模式的东西,或者尝试使用类似Notify Property Changed Events的方法。

希望我能帮忙,

问候