我正在尝试使用复合集合正确绑定多个集合。 请指出我的错误
我期待像
这样的东西但相反,我得到了
XAML:
<TreeView Margin="8" Grid.Row="2" Grid.RowSpan="2" Name="CarTree" >
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Car}" ItemsSource="{Binding Children}">
<StackPanel>
<TextBlock Text="{Binding Path=CarName}" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Year}">
<StackPanel>
<TextBlock Text="{Binding Path=YearName}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
年级:
public class Year:ViewModelBase
{
private string _yearname= String.Empty;
public string YearName
{
get { return _yearname; }
set
{
_yearname= value;
OnPropertyChanged("YearName");
}
}
}
汽车类:
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 =... }
};
}
}
}
答案 0 :(得分:0)
也许您最好不要使用分层数据模板,因为您的数据结构似乎不是递归的。
但如果你想保留它们,你可以做类似的事情:
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>