MVVM - 自动复位标志实现

时间:2017-04-17 08:22:57

标签: c# wpf mvvm data-binding binding

我的自定义控件中有一个布尔属性。我有一个属性更改回调方法,其中每当视图更新属性时我重置标志值,即视图将属性值设置为true并在自定义控件中我做一些处理和设置属性价值回归虚假。当我将自定义控件中的属性值更新为false时,它未更新到视图端。

CustomControl:

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;
}

当我在自定义控件中将boolean标志设置为false时,是否有人可以帮助我理解为什么值不会反映在viewmodel中?

1 个答案:

答案 0 :(得分:0)

Wy您在ResetValue课程中定义了另一个MainWindow属性吗?您应该设置ResetFlag控件的ExtendedTextBox属性。

在XAML标记中为控件提供x:Name

<local:ExtendedTextBox x:Name="ctrl" ResetFlag="{Binding ResetValue,Mode=TwoWay}"/>

...并在Button_Click事件处理程序中设置控件的属性:

private void Button_Click(object sender, RoutedEventArgs e)
{
    ctrl.ResetValue = true;
}