C# 使用混合集合的WPF Treeview数据绑定
我试图通过使用复合集合正确绑定多个集合。 请指出我的错误 我期待着像这样的事情C# 使用混合集合的WPF Treeview数据绑定,c#,wpf,treeview,C#,Wpf,Treeview,我试图通过使用复合集合正确绑定多个集合。 请指出我的错误 我期待着像这样的事情 汽车 年 2014年 2013年 名字 丰田 欧元 奔驰 但是相反,我得到了 汽车 2014年 2013年 丰田 奔驰 XAML: 车辆等级: public class Car: ViewModelBase { private string _carname= String.Empty; public string CarName { get
- 汽车
- 年
- 2014年
- 2013年
- 名字
- 丰田
- 欧元
- 奔驰
- 年
- 汽车
- 2014年
- 2013年
- 丰田
- 奔驰
public class Car: ViewModelBase
{
private string _carname= String.Empty;
public string CarName
{
get { return _carname; }
set
{
//ignore if values are equal
if (value == _carname) return;
_carname= value;
OnPropertyChanged("CarName");
}
}
private ObservableCollection<Year> _years=new ObservableCollection<Year>();
public ObservableCollection<Year> Years
{
get { return _years; }
set
{
//ignore if values are equal
if (value == _years) return;
_years= value;
OnPropertyChanged("Years");
}
}
public IList Children
{
get
{
return new CompositeCollection()
{
new CollectionContainer() { Collection = this.Years},
new CollectionContainer() { Collection = ...},
new CollectionContainer() { Collection =... }
};
}
}
公共级汽车:ViewModelBase
{
私有字符串_carname=string.Empty;
公共字符串
{
获取{return\u carname;}
设置
{
//如果值相等,则忽略
如果(值==\u carname)返回;
_卡纳姆=价值;
不动产变更(“卡纳姆”);
}
}
私人可观测集合_年=新可观测集合();
公众可观察的收集年份
{
获取{返回_年;}
设置
{
//如果值相等,则忽略
如果(值==_年)返回;
_年=价值;
不动产变更(“年”);
}
}
公营儿童
{
得到
{
返回新的CompositeCollection()
{
new CollectionContainer(){Collection=this.Years},
新建CollectionContainer(){Collection=…},
新建CollectionContainer(){Collection=…}
};
}
}
}也许您最好不要使用分层数据模板,因为您的数据结构似乎不是递归的 但如果你想保留它们,你可以采取以下措施:
public class YearsCollection : ObservableCollection<Year>
{
}
...
YearsCollection _years = new YearsCollection();
public YearsCollection Years
{
get { return _years; }
set
{
//ignore if values are equal
if (value == _years) return;
_years = value;
OnPropertyChanged("Years");
}
}
public IList Children
{
get
{
return new[]
{
this.Years
...
};
}
}
public class years集合:ObservableCollection
{
}
...
YearsCollection _years=新的YearsCollection();
公共年收集年
{
获取{返回_年;}
设置
{
//如果值相等,则忽略
如果(值==_年)返回;
_年=价值;
不动产变更(“年”);
}
}
公营儿童
{
得到
{
返回新的[]
{
这个,好几年了
...
};
}
}
并为每个中间集合添加一个模板:
<HierarchicalDataTemplate DataType="{x:Type local:YearsCollection}" ItemsSource="{Binding}">
<StackPanel>
<TextBlock Text="Years" />
</StackPanel>
</HierarchicalDataTemplate>
谢谢你的回答。我编辑了一下我的帖子,它会在名称或子类别下包含汽车模型。因此,您可以将相同的原则应用于LocationCollection
,它将具有Name
属性,如“Euro”,并将包含此位置的名称。
public class YearsCollection : ObservableCollection<Year>
{
}
...
YearsCollection _years = new YearsCollection();
public YearsCollection Years
{
get { return _years; }
set
{
//ignore if values are equal
if (value == _years) return;
_years = value;
OnPropertyChanged("Years");
}
}
public IList Children
{
get
{
return new[]
{
this.Years
...
};
}
}
<HierarchicalDataTemplate DataType="{x:Type local:YearsCollection}" ItemsSource="{Binding}">
<StackPanel>
<TextBlock Text="Years" />
</StackPanel>
</HierarchicalDataTemplate>