根据类型选择数据模板

我已经宣布了以下类型:

public interface ITest { } public class ClassOne : ITest { } public class ClassTwo : ITest { } 

在我的viewmodel中,我正在声明并初始化以下集合:

 public class ViewModel { public ObservableCollection Coll { get; set; } = new ObservableCollection { new ClassOne(), new ClassTwo() }; } 

在我看来,我正在声明以下ItemsControl

           

我希望看到的是一个红色方块,后面是一个蓝色方块,而我所看到的是以下内容:

在此处输入图像描述

我究竟做错了什么?

您的问题可能是由XAML的辛苦工作引起的。 具体来说,您需要将Type传递给DataType ,但是您传递的是具有该类型名称的字符串。

使用x:Type来装饰DataType的值,如下所示:

           

您也可以使用DataTemplateSelector。 MSDN参考 和Stackoverflow参考。