【发布时间】:2011-08-16 18:37:00
【问题描述】:
我正在尝试通过ValueConverter 将ObservableCollection<T> 绑定到TreeView(或任何其他控件)。在 ValueConverter 中,我使用 AsHierarchy 扩展 (scip.be) 将自引用(每个实体都有一个 ParentId 字段)转换为层次结构。
如前所述,我将我的(平面列表)实体存储在 ObservableCollection<T> 中,当我不使用 ValueConverter 时,列表的更新会反映在视图 (GUI) 中。
如果我添加 ValueConverter,更新不会再反映在我的视图中,如果我在值转换器内设置断点,我注意到它仅在加载时调用一次,忽略所有进一步的 CollectionChanged 事件.
ValueConverter的源代码:
public class HierarchyValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null) return null;
ObservableCollection<Entity> data = (ObservableCollection<Entity>)value;
return data.AsHierarchy(p => p.Id, p => p.ParentId);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我绑定转换器的ItemsSource:
ItemsSource="{Binding Data,
Source={StaticResource MyDataSource},
Converter={StaticResource HierarchyValueConverter}}"
我希望有人能提供答案,因为这个问题已经困扰了我很长一段时间了。
提前谢谢你!
【问题讨论】:
-
请将 XAML 发布到您附加值转换器的位置。
标签: c# wpf xaml data-binding observablecollection