【发布时间】:2017-09-12 20:31:15
【问题描述】:
我的自定义控件中有一个布尔属性。我有一个属性更改的回调方法,每当视图更新属性时,我都会重置标志值,即视图会将属性值设置为 true,在自定义控件中,我正在做一些处理并将属性值设置回 false .当我将自定义控件中的属性值更新为 false 时,它不会更新到视图端。
自定义控件:
public bool ResetFlag
{
get { return (bool)GetValue(ResetFlagProperty); }
set { SetValue(ResetFlagProperty, value); }
}
public static readonly DependencyProperty ResetFlagProperty = DependencyProperty.Register("ResetFlag", typeof(bool), typeof(ExtendedTextBox), new PropertyMetadata(false, OnResetFlagChanged));
private static void OnResetFlagChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var extendedTextBox= d as ExtendedTextBox;
if (extendedTextBox== null)
{
return;
}
if ((bool)e.NewValue)
{
//Do processing here
extendedTextBox.ResetFlag = false;
}
}
视图模型:
<StackPanel>
<local:ExtendedTextBox ResetFlag="{Binding ResetValue,Mode=TwoWay}"/>
<Button Content="ResetFlag" Click="Button_Click"/>
</StackPanel>
public bool ResetValue
{
get { return (bool)GetValue(ResetValueProperty); }
set { SetValue(ResetValueProperty, value); }
}
public static readonly DependencyProperty ResetValueProperty = DependencyProperty.Register("ResetValue", typeof(bool), typeof(MainWindow), new PropertyMetadata(false));
private void Button_Click(object sender, RoutedEventArgs e)
{
ResetValue = true;
}
当我在自定义控件中将布尔标志设置为 false 时,有人可以帮助我理解为什么视图模型中没有反映该值吗?
【问题讨论】:
-
如果没有一个好的minimal reproducible example 可以可靠地重现您的问题,就无法确定。但是,当 WPF 正在处理另一个方向的更新时,WPF 通常会禁用一个方向的绑定更新。目前尚不清楚是什么导致您进行此设计,但我怀疑这是管理您正在尝试做的事情的最佳方式。您应该发布一个询问更广泛问题的问题,而不是这个特定的实现。见XY Problem
-
旁注:您不需要在
ViewModel中使用DependencyProperty,只需一个“普通”Property。 -
@PeterDuniho 感谢您的建议。我将更新问题,或者我将在不同的线程中创建新问题。
-
@FlatEric 是的,我可以使用普通的
CLR property而不是DependencyProperty。但这并不能解决我面临的问题。 -
@FlatEric 是对的:如果它不能解决“您的问题”,那是因为您做错了其他事情(未设置 DataContext,VM 未实施正确的方法等...)
标签: c# wpf mvvm data-binding binding