Я пытаюсь привязать ObservableCollection<T>
к TreeView
(или любому другому элементу управления в этом отношении) через ValueConverter
.В ValueConverter я использую расширение AsHierarchy
( scip.be ) для преобразования самообращения (у каждого объекта есть поле ParentId) в иерархию.
Как уже упоминалось, яхранить мои (плоский список) сущности внутри ObservableCollection<T>
, где обновления списка отражаются в представлении (GUI), когда я не использую ValueConverter.
Если я добавлю 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();
}
}
Источник Items, с которым я связываю конвертер:
ItemsSource="{Binding Data,
Source={StaticResource MyDataSource},
Converter={StaticResource HierarchyValueConverter}}"
Я надеюсь, что кто-то может дать ответ, так как этот вызывает у меня довольно долгое время.
Заранее спасибо!