我有一个MVVM应用程序,MainWindowViewModel
连接到MainWindow
视图
在MainWindow
视图中,我有ComboBox
个包含股票代码的符号。
我有另一个名为AllStockQuoteViewModel
的视图模型和视图连接到AllStockQuoteView
,其中包含一系列股票及其价格。
我希望能够从ComboBox
中选择一个项目,并选中并突出显示AllStockQuoteView
中的项目。在MainWindowViewModel
我已保存对AllStockQuoteViewModel
的引用,并使用该方法调用方法查找ObservableCollection
绑定到AllStockQuoteView
的股票代码符号,但是避风港找不到以AllStockQuoteView
为基础以编程方式选择项目的方法。
我SelectedQuote
上的AllStockQuoteViewModel
属性绑定到AllStockQuoteView
上的列表视图,我可以选择其中一个项目,我的SelectedQuote
属性设置正常。如果我在我的SelectQuote
方法中以编程方式设置此项,则看起来好像未在视图中选择该项目,尽管该项目会传回MainWindowViewModel
并且我可以使用它来填充MainWindow
视图上的文本块。
我希望能够通过突出显示选择AllStockQuoteView
上的项目,就像用户选择它一样。
如何做到这一点?
答案 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等方法。
希望我能够提供帮助,
问候