Как я могу обновить источник привязанного пользовательского свойства зависимости? - PullRequest
2 голосов
/ 07 апреля 2011

У меня есть пользовательский DepenencyProperty, который определяет видимость UserControl. Обычно оно связано с логическим значением, однако я хотел бы установить его в False при нажатии клавиши Escape.

Проблема в том, что я не хочу перезаписывать привязку, я хочу обновить значение источника привязок. Как я могу сделать это в коде позади?

Например, с этим XAML

<local:MyControl IsVisibile="{Binding IsControlVisible}" />

Я хочу обновить значение IsControlVisible на false, а не MyControl.IsVisible

Ответы [ 2 ]

5 голосов
/ 07 апреля 2011

WPF 4?Используйте SetCurrentValue:

this.SetCurrentValue(IsControlVisibleProperty, false);

Этот не будет перезаписывать привязку, а вместо этого протолкнет false к источнику привязки.

5 голосов
/ 07 апреля 2011

Это должно быть возможно через BindingExpressions, попробуйте что-то вроде этого:

private void MyControl_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Escape)
    {
        var source = sender as FrameworkElement;
        var expression = source.GetBindingExpression(UIElement.IsVisibleProperty);
        (expression.DataItem as MyDataItem).IsControlVisible = false;
    }
}

( Если вы не используете UIElement.IsVisibleProperty повторно, вам нужно указать егочерез MyControl.IsVisibleProperty конечно )


Вот метод использования отражения:

var source = sender as FrameworkElement;
var expression = source.GetBindingExpression(UIElement.IsVisibleProperty);
var dataType = expression.DataItem.GetType();
dataType.GetProperties().Single(x => x.Name == expression.ParentBinding.Path.Path)
        .SetValue(expression.DataItem, false, null);
...