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

问题描述 投票:1回答:2

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

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

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

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

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

如何才能做到这一点?

c# wpf mvvm
2个回答
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
投票

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

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

希望我能够提供帮助,

问候

© www.soinside.com 2019 - 2024. All rights reserved.