如何绑定到集合而不使用集合的索引?
我想了解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}"
)?我该如何解决这个问题或者改变我的实施方案是否正确?
感谢,
添加上MyModelClass称为 “SelectedData” 或类似的东西的属性。 然后将该属性绑定到ComboBox的SelectedItem属性
好吧,我会试试这个。感谢您的建议。 – therealjohn 2012-07-05 15:45:18
确保你使它成为一个依赖属性,否则它将不会通知UI自身的变化 - 这可能是你之前出错的地方 - 为了澄清,一个依赖属性会在属性改变时通知,而不是在基础对象更改 - 这对'SelectedItem'很有用。如果您还希望底层对象通知它需要实现.NET通知接口(INotifyPropertyChanged) – Charleh 2012-07-05 15:46:42
感谢您的澄清。我接受这一点是因为你确实回答了我原来的问题。通知到用户界面是一个单独的主题。再次感谢您的建议和帮助。 – therealjohn 2012-07-05 15:47:36
为什么当您只需要集合中的一个项目时实现集合类型?如果你想要当前项目,你需要另一个属性,指向当前项目 – Charleh 2012-07-05 15:27:54
我同意这也让我感到困惑,但那是我遇到的另一个问题,当属性发生变化时,我无法获得绑定更新,除非它是在一个集合中。但是,这是与这个问题分开的问题。 – therealjohn 2012-07-05 15:44:41