作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个自定义的 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/
我是一名优秀的程序员,十分优秀!