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
这应该是可能的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.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);
Run Code Online (Sandbox Code Playgroud)
WPF 4?用途SetCurrentValue:
this.SetCurrentValue(IsControlVisibleProperty, false);
Run Code Online (Sandbox Code Playgroud)
这不会覆盖绑定,但是会推false送到绑定源。
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |