Функция С#, вызываемая после установки свойства зависимости

Мой код в настоящее время выглядит так:

private Foo myFoo;

public Foo CurrentFoo
{
    get { return myFoo; }
    set { SetFoo(value); }
}

private void SetFoo(Foo newFoo)
{
    // Do stuff
    // Here be dragons

    myFoo = newFoo;
}

Чтобы иметь возможность связать его в XAML/WPF, мне нужно превратить Foo в свойство зависимости:

public static DependencyProperty CurrentFooProperty = 
    DependencyProperty.Register("CurrentFoo", typeof(Foo), 
        typeof(FooHandler), new PropertyMetadata(false));        

public Foo CurrentFoo
{
    get { return (Foo)GetValue(CurrentFooProperty); }
    set { SetValue(CurrentFooProperty, value); }
}

Я слышал, что вы не должны делать магию внутри фактического набора свойств C# {}, так как он может не вызываться, а значение записывается непосредственно в свойство зависимостей. Если это не так, дайте мне знать, это кажется наиболее очевидным и простым путем.

Я знаю, что могу добавить функцию проверки в свойство зависимости, но я предполагаю, что ее не следует использовать для этого? Мне нужно сообщить об изменении устаревшим системам, которые еще не могут быть привязаны к XAML.

Как лучше всего подойти к этой проблеме?


person Mizipzor    schedule 15.03.2010    source источник


Ответы (1)


Это должно обрабатываться обратным вызовом, назначенным свойству зависимости. Правильное место для этого зависит от того, что на самом деле здесь происходит:

// Do stuff
// Here be dragons

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

Если, однако, выполняется что-то вроде проверки через устаревшую систему, может быть более целесообразным поместить этих драконов в ValidationCallback.

Я сомневаюсь, что обратный вызов CoerceValue уместен, учитывая ваш сценарий.

person Reed Copsey    schedule 15.03.2010