设置缺血为真时,避免将被触发的事件触发

时间:2012-02-21 08:06:07

标签: silverlight events

在我的silverlight应用程序中,我有一个复选框:

<CheckBox Content="Check me" Checked="CheckBox_Checked" IsChecked="{Binding IsChecked}" />

IsChecked属性绑定到我的viewmodel中的属性:

    private bool isChecked;
    public bool IsChecked
    {
        get
        {
            return isChecked;
        }
        set
        {
            if (isChecked == value)
                return;

            isChecked = value;
            OnPropertyChanged(new PropertyChangedEventArgs("IsChecked"));
        }
    }

在我的viewmodel中,我有:

public MainPage()
{
    InitializeComponent();

    IsChecked = true;

    DataContext = this;
}

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    // IsChecked = true fired the event
}

问题是我已经解雇了被检查的事件我手动设置了IsChecked值。这个值来自配置并被设置为初始值,不应该触发做生意的事件......

如何避免此事件被解雇?

(这是一个易于重现的样本,事实上,事件被绑定到一个命令)

提前感谢您提供任何帮助

3 个答案:

答案 0 :(得分:3)

我会在初始化后连接事件处理程序:

<CheckBox x:Name="theCheckBox" Content="Check me" IsChecked="{Binding IsChecked}" />

public MainPage()
{
    InitializeComponent();

    IsChecked = true;

    DataContext = this;

    theCheckBox.Checked += CheckBox_Changed;
}

答案 1 :(得分:0)

如果我是你,我会将私有变量默认为true,并且在绑定中,设置FallbackValue = True,因此它将其作为默认值。如果只是一个案例,如果事件被设置为true,则不希望触发事件,如果“value = true”,则不要触发OnPropertyChanged事件。但我认为你想要的是第一个选项,只是将该变量默认为true而不触发事件。 FallbackValue加上针对私有成员而不是公共属性应该削减它。

答案 2 :(得分:0)

我遇到了同样的问题并通过做Phil建议解决了这个问题,但是我没有在MainPage()上执行此操作,而是在加载复选框时执行此操作。这对我有用。