2011-02-28 103 views
2

我正在创建WPF自定义控件以显示VS面板(错误/警告/消息)中的日志消息。该控件是一个ItemControl,每个项目都是要显示的消息。但是我必须将消息分类到适当的类别中,所以我需要每个项目都公开一些内容(可能是一个界面),让控件知道如何对消息进行分类。我不知道如何强制该物品属于某种类型,我该如何实现? 设计启示错误? 谢谢!WPF ItemControl:将项目的类型限制为特定的项目

回答

1

可以继承自ItemsControl您的自定义控制,并创建一个强类型collectional属性,那么在你的控件模板放入以下行:

<Setter Property="ItemsSource" Value="{Binding MyStronglyTypedCollectionalPropertyName}" /> 

我做了很多与ObservableCollections。

事实上,你使用ItemsControl并不要求你直接使用它的ItemsSource,你可以绑定到它。

P.S.从技术上讲,仍然有可能让任何人都离开并直接绕过MyStronglyTypedCollectionalPropertyName设置ItemsSource。就我个人而言,我认为这不是一个好主意,但您可以从OnPropertyChanged中检查值类型:

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); 

}