gpt4 book ai didi

wpf - 如何更新绑定(bind)的自定义依赖属性的源?

转载 作者:行者123 更新时间:2023-12-02 06:23:16 25 4
gpt4 key购买 nike

我有一个自定义的 DepenencyProperty,它决定了 UserControl 的可见性。它通常绑定(bind)到一个 bool 值,但是我想在按下 Escape 键时将它设置为 False。

问题是,我不想覆盖绑定(bind),我想更新绑定(bind)源值。我如何在代码隐藏中执行此操作?

例如,使用此 XAML

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

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

最佳答案

这应该可以通过 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);

关于wpf - 如何更新绑定(bind)的自定义依赖属性的源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5584131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com