无法将Observable Collection绑定到UserControl上的附加属性

4

我希望将自定义类型(BoundItem)的ObservableCollection绑定到视图上。

我是这样使用它的:

<v:MyUserControlBase x:Class="My.Views.MyView"
         (...)
         h:FrameworkElementDropBehavior.MyItems="{Binding Attachments}">

在ViewModel中,"附件"被定义为:

public ObservableCollection<BoundItem> Attachments 
{ 
   get { return _Attachments; } 
   set { _Attachments = value; } 
}

我的视图是一个实际的DependencyObject,因为当我在视图的后台代码中执行以下代码:

MessageBox.Show((this as DependencyObject).ToString());

它显示为“True”。

我这样定义了我的依赖属性:

    public static readonly DependencyProperty MyItemsProperty = DependencyProperty.RegisterAttached("MyItems", typeof(ObservableCollection<BoundItem>), typeof(MyView), new FrameworkPropertyMetadata(null));
    public static string GetMyItems(DependencyObject element)
    {
        if (element == null) throw new ArgumentNullException("MyItems");
        return (ObservableCollection<BoundItem>)element.GetValue(MyItemsProperty);
    }
    public static void SetMyItems(DependencyObject element, ObservableCollection<BoundItem> value)
    {
        if (element == null) throw new ArgumentNullException("MyItems");
        element.SetValue(MyItemsProperty, value);
    }

发生的错误是:

'Binding' 无法设置为类型为 'MyView' 的 'SetMyItems' 属性。'Binding' 只能设置为 DependencyObject 的 DependencyProperty。

谢谢您的帮助 :) .x
2个回答

2

您的问题出在属性注册上。您应该将所有者类型从MyView更改为FrameworkElementDropBehavior,即定义属性的类。

public static readonly DependencyProperty MyItemsProperty =
     DependencyProperty.RegisterAttached("MyItems", 
                                        typeof(ObservableCollection<BoundItem>), 
                                        typeof(FrameworkElementDropBehavior), 
                                        new FrameworkPropertyMetadata(null));

0
此外,SetMyItems的第二个参数应该是ObservableCollection类型,而GetMyItems应该具有返回类型ObservableCollection。

哎呀,那个问题已经修复了,但错误仍然存在。谢谢 (: - dotixx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接