Я пытаюсь указать KeyValuePair<int,MyClass>
как тип данных для DataTemplate в WPF. KeyValuePair это от ObservableDictionary
объекта (я использую Dr WPF's implementation, если это уместно.Определение DataTemplate для KeyValuePair
Использование How to reference a generic type in the DataType attribute of a HierarchicalDataTemplate?, я был в состоянии получить что-то близкое, однако, я получаю ошибку компилятора.
мне нужно быть в состоянии . определить HierarchicalDataTemplate для KeyValuePair, так что я могу создать еще один лист в TreeView ниже него, содержащий коллекцию, которая является частью объекта Value словаря
XAML просто:
<HierarchicalDataTemplate DataType="{local:GenericKeyValuePairType
KeyType=sys:Int32,
ValueType=local:MyClass}"
ItemsSource="{Binding Path=Value.MyList}" />
И GenericKeyValuePairType является MarkupExtension
public class GenericKeyValuePairType : MarkupExtension
{
public Type KeyType { get; set; }
public Type ValueType { get; set; }
public GenericKeyValuePairType() { }
public GenericKeyValuePairType(Type keyType, Type valueType)
{
KeyType = keyType;
ValueType = valueType;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return typeof(KeyValuePair<,>).MakeGenericType(this.KeyType, this.ValueType);
}
}
Когда я делаю это, Visual Studio указывает на то, что это не действует. Конкретная ошибка:
Ключ для словаря не может быть типа «TreeViewBindingTest.GenericKeyValuePairType». Поддерживаются только String, TypeExtension и StaticExtension.
Является ли то, что я пытаюсь сделать даже возможным? Если да, то есть ли лучший подход?
в теме, которую вы связали, есть пример xaml для словаря. по какой причине вы не можете использовать эту реализацию? Я мог бы неправильно истолковать то, что вы пытаетесь сделать. – Default
@Default Я использую его, но мне нужно определить «HierarchicalDataTemplate» для KeyValuePairs внутри этого словаря, поскольку объект Value имеет другую коллекцию, которая будет другим листом в «TreeView». Поэтому мне нужно определить структуру ниже. Я попытался подключиться к свойству «Значения», но это не так, потому что коллекция «Ценности» не наблюдается, любые изменения в Словаре не отображаются в «TreeView» – psubsee2003
. В вашем «Иерархическом шаблоне» вы связываете «MyList» 'to' ItemsSource'. Но «KeyValuePair» не обладает свойством «MyList». Может ли MyClass быть источником шаблона? –