C# 使用ObservableCollection<;T>;作为附属财产?

C# 使用ObservableCollection<;T>;作为附属财产?,c#,wpf,C#,Wpf,因为我不想为每个ObservaleCollection创建不同的附加属性,其中t可以是我的任何个人逻辑类,所以我想知道它是否可能更通用 更具体地说,在使用DependencyProperty.RegisterAttached时,我希望所有者类型为ObservableCollection 这可能吗?您可以这样做,但随后需要为每种类型创建一个具体的类。这将解决您所说的问题-即 因为我不想为每个对象创建不同的附加属性 可观察的收集 这就解决了这个问题(您只有一个附加属性)。但是您仍然需要一行代码来通过

因为我不想为每个ObservaleCollection创建不同的附加属性,其中t可以是我的任何个人逻辑类,所以我想知道它是否可能更通用

更具体地说,在使用DependencyProperty.RegisterAttached时,我希望所有者类型为ObservableCollection


这可能吗?

您可以这样做,但随后需要为每种类型创建一个具体的类。这将解决您所说的问题-即

因为我不想为每个对象创建不同的附加属性 可观察的收集

这就解决了这个问题(您只有一个附加属性)。但是您仍然需要一行代码来通过继承的方式定义具体的类型

public class X<T>
{
    public static ObservableCollection<T> GetCollection(DependencyObject obj)
    {
        return (ObservableCollection<T>)obj.GetValue(CollectionProperty);
    }

    public static void SetCollection(DependencyObject obj, ObservableCollection<T> value)
    {
        obj.SetValue(CollectionProperty, value);
    }

    // Using a DependencyProperty as the backing store for Collection.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty CollectionProperty =
        DependencyProperty.RegisterAttached("Collection", typeof(ObservableCollection<T>), typeof(X<T>), new PropertyMetadata(null));


}

public class XInt : X<int> { }
公共类X
{
公共静态ObservableCollection GetCollection(DependencyObject obj)
{
返回(ObservableCollection)对象GetValue(CollectionProperty);
}
公共静态void集合(DependencyObject对象,ObservableCollection值)
{
对象设置值(CollectionProperty,value);
}
//使用DependencyProperty作为集合的后备存储。这将启用动画、样式、绑定等。。。
公共静态只读DependencyProperty CollectionProperty=
DependencyProperty.RegisterAttached(“集合”、typeof(ObservableCollection)、typeof(X)、new PropertyMetadata(null));
}
公共类XInt:X{}
然后在XAML中:

<Grid local:XInt.Collection="{Binding}">

</Grid>


如果您可以更清楚地解释您正在尝试做什么(即,为什么您需要附加属性为特定类型),那么可能会有更好的解决方案。例如-为什么不将类型设置为IList,然后根据您需要的功能转换为IList或IEnumerable或iNotifyCollection。)

能否给出一个具体的示例,说明您希望在何处使用它?答案确实会有所不同,这取决于您是尝试创建自定义控件还是其他类型的对象。我想创建一个绑定可观察集合的附加属性,因为您无法创建t类型的附加属性类(我假设,因为xaml如何创建您的具体类型),这就是问题所在。