如何通过程序从视图模型中选择列表视图项
本文关键字:视图 选择 列表 模型 程序 何通过 | 更新日期: 2023-09-27 18:29:23
我有一个MVVM应用程序,其MainWindowViewModel
连接到MainWindow
视图
在MainWindow
视图中,我有一个包含股票代码的ComboBox
。
我有另一个视图模型和视图,名为AllStockQuoteViewModel
,连接到AllStockQuoteView
,其中包含股票及其价格的列表。
我希望能够从ComboBox
中选择一个项目,并选中并突出显示AllStockQuoteView
中的项目。在我的MainWindowViewModel
上,我保存了对AllStockQuoteViewModel
的引用,并用它来调用一个方法,在绑定到AllStockQuoteView
的ObservableCollection
中查找股票代码,但还没有找到在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的方法。
希望我能帮忙,
问候