Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF ItemControl:将项的类型限制为特定的类型_Wpf_Itemscontrol - Fatal编程技术网

WPF ItemControl:将项的类型限制为特定的类型

WPF ItemControl:将项的类型限制为特定的类型,wpf,itemscontrol,Wpf,Itemscontrol,作为练习,我正在创建一个WPF自定义控件,以显示VS面板中的日志消息(错误/警告/消息)。控件是一个ItemControl,每个项都是要显示的消息。但是我必须将消息分类到适当的类别中,所以我需要每个项公开一些东西(可能是一个接口),以便让控件知道如何对消息进行分类。我不知道如何强制物品成为某种类型,我如何才能做到这一点? 设计是不是有点错误? 谢谢 您可以从ItemsControl继承自定义控件并创建强类型集合属性,然后在控件的模板中放置以下行: <Setter Property="Ite

作为练习,我正在创建一个WPF自定义控件,以显示VS面板中的日志消息(错误/警告/消息)。控件是一个ItemControl,每个项都是要显示的消息。但是我必须将消息分类到适当的类别中,所以我需要每个项公开一些东西(可能是一个接口),以便让控件知道如何对消息进行分类。我不知道如何强制物品成为某种类型,我如何才能做到这一点? 设计是不是有点错误?
谢谢

您可以从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); 

}