如何绑定到具有未知类型的依赖项属性

时间:2014-02-05 00:19:20

标签: c# wpf

我创建了一个具有依赖项属性的用户控件,我需要将其绑定到多个类型。换句话说,它有一个名为“DataSource”的依赖项属性。但是,开发人员可以绑定类型

ObservableCollection<MyCustomType>

ObservableCollection<ObservableCollection<MyCustomType>>. 

在用户控件的代码中,我想根据检测到的类型不是null或等效的内容来执行两个单独的代码块。我一直在寻找例子,但我认为我对如何做到这一点的看法可能是错误的。指示或方向将不胜感激。

1 个答案:

答案 0 :(得分:1)

将您的依赖项属性声明为object类型的属性。

然后当这个属性的值发生变化时,你可以根据它的值来执行不同的功能,即

public static readonly DependencyProperty DataSourceProperty = 
    DependencyProperty.Register("DataSource", typeof(object), typeof(MyControl), new PropertyMetaData(OnDataSourceChanged));

private static void OnDataSourceChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    var newValue = e.NewValue;

    if(newValue == null)
        return;

    var asSingleLevel = newValue as ObservableCollection<MyCustomType>;
    if(asSingleLevel != null)
    {
        // Do work for single level
    }
    else
    {
        var asDoubleLevel = newValue as ObservableCollection<ObservableCollection<MyCustomType>>;

        if(asDoubleLevel != null)
        {
            // Do work for double level
        }
    }
}