我想了解WPF中的MVVM模式,并且遇到了绑定和集合的一些问题。我不喜欢绑定到集合的索引,因为集合更改。如何绑定到集合而不使用集合的索引?
我MyModelClass : ObservableCollection<MyData>
的MyData
类有一个名为它DataValue
握着我的自定义信息属性。我用MyData
对象填充MyModelClass
。在视图模型类(MyViewModel
)中,我有一个MyModelClass
类型的属性CurrentData
。
现在在这种情况下,我的绑定是一个组合框。 下面是绑定的样子:
<ComboBox Name="cmbxData"
ItemsSource="{Binding Path=CurrentData}"
DisplayMemberPath="DataValue"
SelectedValuePath="DataValue"
SelectedValue="{Binding Path=CurrentData[0].DataValue}"/>
这一切工作正常和MyViewModel
类具有的PropertyChanged通知的接口设置。 我需要每隔几秒刷新一次信息。
我做的MyModelClass
内像这样清爽的集合:
public Class MyModelClass : ObservableCollection<MyData>
{
private static MyModelClass current = null;
public static MyModelClass Current
{
get
{
if(current == null)
current = new MyModelClass();
return current;
}
}
private void UpdateModel(MyData newData)
{
MyModelClass newModel = new MyModelClass();
newModel.Add(newData);
current = newModel;
}
}
里面MyViewModel
有这样的:
MyModelClass CurrentData = MyModelClass.Current;
我尽力给尽可能多的代码,因为我可以并保持简单。请让我知道是否还有需要澄清。感谢您就如何解决我的问题提出任何建议。
如果你错过了它: 问题:我如何绑定到集合,或者我想在集合中显示的值,而不使用像上面显示的索引(SelectedValue="{Binding Path=CurrentData[0].DataValue}"
)?我该如何解决这个问题或者改变我的实施方案是否正确?
感谢,
为什么当您只需要集合中的一个项目时实现集合类型?如果你想要当前项目,你需要另一个属性,指向当前项目 – Charleh 2012-07-05 15:27:54
我同意这也让我感到困惑,但那是我遇到的另一个问题,当属性发生变化时,我无法获得绑定更新,除非它是在一个集合中。但是,这是与这个问题分开的问题。 – therealjohn 2012-07-05 15:44:41