Как мне вызвать метод в коде позади, когда свойство обновляется? - PullRequest
4 голосов
/ 05 марта 2011

Что мне нужно, так это уметь выполнять код в выделенном коде для моего класса представления, когда свойство в моей модели представления обновляется. Насколько я понимаю, мне нужно использовать свойство зависимости.

Моя модель просмотра реализует INotifyPropertyChanged.

Вот свойство в моей модели:

private DisplayPosition statusPosition;
public DisplayPosition StatusPosition
{
    get { return this.statusPosition; }
    set
    {
        this.statusPosition = value;
        this.OnPropertyChanged("StatusPosition");
    }
}

Вот мое свойство зависимости на мой взгляд:

public DisplayPosition StatusPosition
{
    get { return (DisplayPosition)GetValue(StatusPositionProperty); }
    set { SetValue(StatusPositionProperty, value); }
}
public static readonly DependencyProperty StatusPositionProperty =
        DependencyProperty.Register(
        "StatusPosition",
        typeof(DisplayPosition),
        typeof(TranscriptView),
        new PropertyMetadata(DisplayPosition.BottomLeft));

Здесь я установил привязку в своем классе представления (обработчик для this.DataContextChanged):

private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    Binding myBinding = new Binding("StatusPosition");
    myBinding.Source = this.DataContext;
    myBinding.NotifyOnTargetUpdated = true;
    this.SetBinding(TranscriptView.StatusPositionProperty, myBinding);
}

Когда я устанавливаю точку останова на установщик для свойства в моем представлении, оно никогда не срабатывает даже после того, как я наблюдаю изменение значения в модели представления и возникает событие PropertyChanged. В конечном счете, моя цель состоит в том, чтобы иметь возможность помещать больше кода в установщик.

Волшебная деталь, если вам интересно, это то, что мне нужно переместить TextBlock между несколькими StackPanels, основываясь на этом значении. Кажется, я не могу найти способ сделать это только на XAML.

Чаще всего эти проблемы представляют собой простые маленькие очевидные вещи, которые я пропустил. Ничто из того, что я пытаюсь, не помогает мне разобраться с этим.

1 Ответ

2 голосов
/ 05 марта 2011

Когда я устанавливаю точку останова для установщика для свойства в моем представлении, оно никогда не срабатывает даже после того, как я наблюдаю изменение значения в модели представления и возникает событие PropertyChanged.В конечном счете, моя цель состоит в том, чтобы иметь возможность поместить больше кода в установщик.

Вы не можете этого сделать.Когда вы используете DependencyProperties, установщик никогда не вызывается при изменении связанного свойства.Его единственная цель - позволить вам установить DP из кода.

Вместо этого вам нужно добавить PropertyChangedCallback к метаданным вашего DP и добавить туда дополнительный код.Это будет вызвано при обновлении значения DP, будь то через привязку, код и т. Д.

...