我很难解决这个简单的问题:
我正在使用带有HierarichalDataTemplate的树视图来显示两个实体的层次结构:Organization
和Unit
。本组织与其本身有很多关系,因为它可能有子组织。每个组织与单位有一对多的关系,因为一个组织可以包含几个单位。
我成功地使用带有可观察集合的multibindings来填充树。在初始化中调用转换器,但我不能再次调用它。因此,当我添加任何单位或组织时,列表不会更新:
<HierarchicalDataTemplate.ItemsSource>
<MultiBinding Converter="{StaticResource TreeMultiValueConverter}">
<Binding Path="ChildOrgs"/>
<Binding Path="Units" />
</MultiBinding>
</HierarchicalDataTemplate.ItemsSource>
请帮忙...... 感谢
答案 0 :(得分:1)
我认为这里发生的事情是当你将集合传递给转换器(即“TreeMultiValueConverter”)时,你将两者合并为一个集合,比如一个ObservableCollection并将其作为源返回。
这正是当您向单元或组织集合添加新项目时,集合已更改事件不会传播到HierarchicalDataTemplate的ItemsSource。
解决方案:
返回转换器中的列表集合视图,并更新集合更改后的视图。
public object Convert(object[] values, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if(values == null || values.Length != 2) return null;
var combinedList = new List<object>();
var listCollectionView= new ListCollectionView(combinedList);
var childOrgs = values[0] as ObservableCollection<Organization>;
if(childOrgs != null)
{
combinedList.AddRange(childOrgs);
childOrgs.CollectionChanged += (s,e) => listCollectionView.Refresh();
}
var units = values[1] as ObservableCollection<Unit>;
if(units != null)
{
combinedList.AddRange(units);
units.CollectionChanged += (s,e) => listCollectionView.Refresh();
}
listCollectionView.Refresh();
return listCollectionView;
}
答案 1 :(得分:0)
我已经使用部分扩展我的实体类来解决了我的问题,并添加了一个同时包含组织和单元类型的'MixedChilds'集合。 当HierarchialDataTemplate与之绑定时,一切正常。