我已经创建了一个DataTemplateSelector,它使用已知接口的集合进行初始化.如果传入选择器的项目实现其中一个接口,则返回关联的数据模板.
首先,这是有问题的ICategory接口......
public interface ICategory
{
ICategory ParentCategory { get; set; }
string Name { get; set; }
ICategoryCollection Subcategories { get; }
}
Run Code Online (Sandbox Code Playgroud)
这是基于基类或接口而不仅仅是特定具体类匹配的DataTemplateSelector ...
[ContentProperty("BaseTypeMappings")]
public class SubclassedTypeTemplateSelector : DataTemplateSelector
{
private delegate object TryFindResourceDelegate(object key);
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var frameworkElement = container as FrameworkElement;
foreach(var baseTypeMapping in BaseTypeMappings)
{
// Check if the item is an instance of, a subclass of,
// or implements the interface specified in BaseType
if(baseTypeMapping.BaseType.IsInstanceOfType(item))
{
// …Run Code Online (Sandbox Code Playgroud) c# wpf datatemplate hierarchicaldatatemplate datatemplateselector
我想实现一个具有以下结构的树视图.....
[RootNode] <----树的根
- [ParentNode P1] <---- ModelClass P1的对象
---- [ChildNode C1] <----- ModelClass C1的对象(有不同类型的子节点) ()
[ChildNode C2] <----- ModelClass C2的对象(也有不同类型的子
节点)---- [ChildNode C3] <----- ModelClass C3的对象(有)不同类型的孩子)
- [ParentNode Q1] <---- ModelClass Q1的对象
---- [ChildNode B1] <----- ModelClass B1的对象(也有不同类型的孩子)
- --- [ChildNode B2] <----- ModelClass B2的对象(也有不同类型的子
节点)---- [ChildNode B3] <----- ModelClass B3的对象(有不同类型的子节点)()
[ParentNode R1] <---- ModelClass R1的对象
---- [ChildNode A1] <----- ModelClass A1的对象(也有不同类型的子节点)
---- [ ChildNode A2] <----- ModelClass A2的对象(也有不同类型的子
节点)---- [ChildNode A3] <----- ModelClass A3的对象(也有不同类型的子节点))
我已经查看了本网站以及网络上提出的许多解决方案.....但只是无法弄清楚如何做到这一点......
这是我对Wpf的第一次尝试,这是一个至关重要的要求......
也很难找到上述不同类的对象模型.....
上面显示的所有类都有其他属性,包括它们的子节点......我不想只显示子节点的所有属性 …