这个问题相对复杂,希望我能够清晰地解释。 我有一个对象,让我们称之为 Manager,Manager 拥有一组被其管理的人员,这些人都实现了 IPerson 接口,但是不同类型的人具有不同的属性。 我想在树形结构中显示这个经理,并在经理节点下显示他正在管理的所有项目,这可以通过管理的人员确定。
因此,计划使用转换器将 person 转换为项目列表。以下是 XAML:
我的Person类实现了INotifyPropertyChanged接口,保存人员信息的列表实现了INotifyCollectionChanged接口。当我设置树形视图(TreeView)ItemsSource时,经理们将显示其项目列表,这段代码运行良好。
然而,当我向人员列表中添加新人员时,TreeView不会更新。调试时,我可以看到CollectionChanged事件触发了Add操作和添加的项。同时,CollectionChanged事件不为null,因此我知道UI正在监视它。但是,当添加项时,转换器不执行。
以下是保存IPerson对象的列表的Add方法:
因此,计划使用转换器将 person 转换为项目列表。以下是 XAML:
<HierarchicalDataTemplate DataType="{x:Type ui:Manager}">
<TextBlock Text="{Binding Path=Name}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate.ItemsSource>
<Binding Path="People">
<Binding.Converter>
<configUtil:ProjectListConverter/>
</Binding.Converter>
</Binding>
</HierarchicalDataTemplate.ItemsSource>
</HierarchicalDataTemplate>
我的Person类实现了INotifyPropertyChanged接口,保存人员信息的列表实现了INotifyCollectionChanged接口。当我设置树形视图(TreeView)ItemsSource时,经理们将显示其项目列表,这段代码运行良好。
然而,当我向人员列表中添加新人员时,TreeView不会更新。调试时,我可以看到CollectionChanged事件触发了Add操作和添加的项。同时,CollectionChanged事件不为null,因此我知道UI正在监视它。但是,当添加项时,转换器不执行。
以下是保存IPerson对象的列表的Add方法:
public void Add(T item)
{
list.Add(item);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item));
}
我是否某种方式破坏了数据绑定?
还有哪些方面可以检查?
转换器只是查看People列表中的每个项目,并确定他们正在工作的项目,并将项目名称添加到输出列表中。