WPF ItemControl:将项的类型限制为特定的类型
作为练习,我正在创建一个WPF自定义控件,以显示VS面板中的日志消息(错误/警告/消息)。控件是一个ItemControl,每个项都是要显示的消息。但是我必须将消息分类到适当的类别中,所以我需要每个项公开一些东西(可能是一个接口),以便让控件知道如何对消息进行分类。我不知道如何强制物品成为某种类型,我如何才能做到这一点? 设计是不是有点错误?WPF ItemControl:将项的类型限制为特定的类型,wpf,itemscontrol,Wpf,Itemscontrol,作为练习,我正在创建一个WPF自定义控件,以显示VS面板中的日志消息(错误/警告/消息)。控件是一个ItemControl,每个项都是要显示的消息。但是我必须将消息分类到适当的类别中,所以我需要每个项公开一些东西(可能是一个接口),以便让控件知道如何对消息进行分类。我不知道如何强制物品成为某种类型,我如何才能做到这一点? 设计是不是有点错误? 谢谢 您可以从ItemsControl继承自定义控件并创建强类型集合属性,然后在控件的模板中放置以下行: <Setter Property="Ite
谢谢 您可以从ItemsControl继承自定义控件并创建强类型集合属性,然后在控件的模板中放置以下行:
<Setter Property="ItemsSource" Value="{Binding MyStronglyTypedCollectionalPropertyName}" />
这是否仍然允许您不设置
ItemsSource
,然后直接手动推送Items
集合中的任何内容?在我的例子中,如果有任何项不是我期望的类型,我会重写IsItemItsOwnContainerOverride
,并在那里抛出异常。这涵盖了这两种情况,尽管是以迂回的方式。
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgse)
{
if (e.Property == ItemsControl.ItemsSourceProperty && e.NewValue as MySuperTime == null)
{
throw new ArgumentException("ItemsSource value must be of 'MySuperTime' type.");
}
base.OnPropertyChanged(e);
}