如何更新绑定的自定义依赖项属性的源?

Rac*_*hel 2 wpf xaml binding dependency-properties

我有一个自定义DepenencyProperty,它确定UserControl的可见性.它通常绑定到一个布尔值,但是我想在Esc键被命中时将其设置为False.

问题是,我不想覆盖绑定,我想更新绑定源值.我怎么能在代码背后做到这一点?

例如,使用此XAML

<local:MyControl IsVisibile="{Binding IsControlVisible}" />
Run Code Online (Sandbox Code Playgroud)

我想将值更新IsControlVisible为false,而不是MyControl.IsVisible

H.B*_*.B. 5

这应该是可能的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

(如果你没有重复使用,UIElement.IsVisiblePropertyMyControl.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);
Run Code Online (Sandbox Code Playgroud)


Ken*_*art 5

WPF 4?用途SetCurrentValue

this.SetCurrentValue(IsControlVisibleProperty, false);
Run Code Online (Sandbox Code Playgroud)

不会覆盖绑定,但是会推false送到绑定源。