WPF 集合类型绑定的问题
zmidl 2017-03-18 12:40:35 首先建了一个UserControl控件MyControl 有6个TextBlock 然后定义一个IEnumerable类型的依赖属性 Source来接受一个集合数据源。然后 每个TestBlock分别绑定这个Source 的每个项 比如
<TextBlock Text={Binding Source[0]}/>
<TextBlock Text={Binding Source[1]}/>
<TextBlock Text={Binding Source[2]}/>
使用这个MyControl的时候 我的ViewModel 里有个属性是 ObservableCollection<string> Names 作为MyControl的数据源比如:
<MyControl Source={Binding Names}/>
到这里 一切都顺利 我的6个文本框都显示了数据源里的字符串
现在我有个改变 我要建一个Man类 把Name作为属性放进去 并且再加一个 Age的属性 比如
class Man()
{
private string name=string.Empty;
public string Name{get{return name ;};set{name = value ; RaisePropertyChanged(nameof(name));}}
private int age=0;
public int Age.........
}
这样的话 原本ObservableCollection<string> Names 的数据源 变成了ObservableCollection<Man> Mans
而我绑定的是Mans里面的Name这个属性的集合 我该如何实现绑定呢?
我目前用了一个笨办法实现了 但是感觉不是最好 是再建一个属性集合去得到这个Name的集合 比如
public ICollection<string> Names{ get { return this.Mans.Select(o=> o.Name).ToList(); } }
然后每次set属性后还要额外通过事件去通知父对象去RaisePropertyChanged 这个Names集合。
可用分不多了希望朋友们支个招吧。