予以设定一类的规则属性要创建一个附加行为:

public class LookupHelper
{
    public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.RegisterAttached("ItemsSource", typeof(object), typeof(LookupHelper), new UIPropertyMetadata(null, OnItemsSourceChanged));

    private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var control = d as MyControl;
        if(control == null)
                return;

        control.ItemsSource = (IEnumerable)e.NewValue;
    }

    public static object GetItemsSource(GridColumn column)
    {
        return column.GetValue(ItemsSourceProperty);
    }

    public static void SetItemsSource(GridColumn column, object value)
    {
        column.SetValue(ItemsSourceProperty, value);
    }
}   

下面,对MyControl ItemsSource属性是一个普通的特性,所以不能在XAML结合它,因此该附加行为。

现在,当我使用这个附加属性使用字符串或对象,它的工作原理和断点设置我被击中,但是当我用结合的标记设置它,它永远不会运行。为什么不是这方面的工作?

<MyControl ctrl:LookupHelper.ItemsSource="DataSource"/>; //It works
<MyControl ctrl:LookupHelper.ItemsSource="{Binding Path=MyDataSource}"/>; //Does not work

我需要做的是ItemsSource属性设置为由绑定指定的值。

有帮助吗?

解决方案

在您的get和set方法,你定义了接收对象的GridColumn它应该是DependencyObject的。

您可能也想改变你的DP从对象到IEnumerable的类型,因为你的铸造,在您更改处理。

其他提示

您可以请张贴您正在使用的标记?此外,如果有物体存在的实际属性和有意义有那么我认为你应该使用该对象,而不是在一个辅助类附加属性经常依赖属性。

修改 从MSDN: 用于GetPropertyName存取签名必须是:

public static object GetPropertyName(object target)

和用于setPropertyName方法存取签名必须是:

public static void SetPropertyName(object target, object value)

在您的情况下,的GridColumn正确的目标类型?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top