Свойство зависимости WPF не работает - PullRequest
9 голосов
/ 06 декабря 2010

У меня есть пользовательское свойство зависимости, определенное так:

public static readonly DependencyProperty MyDependencyProperty =
DependencyProperty.Register(
"MyCustomProperty", typeof(string), typeof(MyClass));

    private string _myProperty;
    public string MyCustomProperty
    {
        get { return (string)GetValue(MyDependencyProperty); }
        set
        {
            SetValue(MyDependencyProperty, value);
        }
    }

Теперь я пытаюсь установить это свойство в XAML

<controls:TargetCatalogControl MyCustomProperty="Boo" />

Но сеттер в DependencyObject никогда не получает удар! Хотя это происходит, когда я изменяю свойство на обычное свойство, а не на Dep Prop

Ответы [ 3 ]

17 голосов
/ 06 декабря 2010

Попробуйте это ..

    public string MyCustomProperty
    {
        get 
        { 
            return (string)GetValue(MyCustomPropertyProperty); 
        }
        set 
        { 
            SetValue(MyCustomPropertyProperty, value); 
        }
    }

    // Using a DependencyProperty as the backing store for MyCustomProperty.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MyCustomPropertyProperty =
        DependencyProperty.Register("MyCustomProperty", typeof(string), typeof(TargetCatalogControl), new UIPropertyMetadata(MyPropertyChangedHandler));


    public static void MyPropertyChangedHandler(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        // Get instance of current control from sender
        // and property value from e.NewValue

        // Set public property on TaregtCatalogControl, e.g.
        ((TargetCatalogControl)sender).LabelText = e.NewValue.ToString();
    }

    // Example public property of control
    public string LabelText
    {
        get { return label1.Content.ToString(); }
        set { label1.Content = value; }
    }
2 голосов
/ 06 декабря 2010

Это не так, если вы не вызываете его вручную.Существует обработчик с измененным свойством, который можно добавить в вызов конструктора DependancyProperty, чтобы получать уведомления об изменении свойства.

Вызов этого конструктора:

http://msdn.microsoft.com/en-us/library/ms597502.aspx

Экземпляр PropertyMetadata, созданный этим конструктором:

http://msdn.microsoft.com/en-us/library/ms557327.aspx

РЕДАКТИРОВАТЬ: Кроме того, вы не правильно реализуете свойство зависимости.Ваши get и set должны использовать GetValue и SetValue соответственно, и у вас не должно быть члена класса для хранения значения.Имя члена DP также должно быть {PropertyName}Property, например MyCustomPropertyProperty, если get / set, а имя свойства в качестве зарегистрированного - MyCustomProperty.См. http://msdn.microsoft.com/en-us/library/ms753358.aspx для получения дополнительной информации.

Надеюсь, это поможет.

1 голос
/ 29 мая 2014

Может быть, вы используете MVVM и переопределяете DataContext вашего View?

Если вы это сделаете, то событие для изменения MyCustomProperty будет возбуждено для original DataContext, а не дляновая ViewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...