【发布时间】:2016-05-31 07:24:12
【问题描述】:
我已经声明了以下类型:
public interface ITest { }
public class ClassOne : ITest { }
public class ClassTwo : ITest { }
在我的视图模型中,我声明并初始化了以下集合:
public class ViewModel
{
public ObservableCollection<ITest> Coll { get; set; } = new ObservableCollection<ITest>
{
new ClassOne(),
new ClassTwo()
};
}
在我看来,我声明如下ItemsControl
<ItemsControl ItemsSource="{Binding Coll}">
<ItemsControl.Resources>
<DataTemplate DataType="local:ClassOne">
<Rectangle Width="50" Height="50" Fill="Red" />
</DataTemplate>
<DataTemplate DataType="local:ClassTwo">
<Rectangle Width="50" Height="50" Fill="Blue" />
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
我希望看到的是一个红色方块,然后是一个蓝色方块,而不是我看到的是以下内容:
我做错了什么?
【问题讨论】:
-
我认为你实际上想要DataTemplateSelector
-
@ChrisW。直接来自该链接:"... 当您为同一类型的对象拥有多个 DataTemplate 并且您希望提供自己的逻辑以根据每个数据对象的属性选择要应用的 DataTemplate 时,请创建一个 DataTemplateSelector . 请注意,如果您有不同类型的对象,您可以在 DataTemplate 上设置 DataType 属性。"
-
对不起伙计,我在想ItemTemplateSelector,反正我可能不应该在这里,自从冬天以来的第一个美好的一天,我的思绪在别处,我想我什至没有真正看过整个问题大声笑。春暖花开,干杯。
-
您也可以使用 DataTemplateSelector。 MSDN ref. 和 Stackoverflow ref.
标签: c# wpf xaml mvvm datatemplate