在我的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值。这个值来自配置并被设置为初始值,不应该触发做生意的事件......
如何避免此事件被解雇?
(这是一个易于重现的样本,事实上,事件被绑定到一个命令)
提前感谢您提供任何帮助
答案 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()
上执行此操作,而是在加载复选框时执行此操作。这对我有用。