我的应用程序上有两个屏幕,每个屏幕都有相同的地图组件。地图的图层存储为两个列表对象,其中图层的简单ID表示每个屏幕上的可见图层
<CheckBox
VerticalAlignment="Center"
Margin="3"
IsChecked="{Binding Visible}"
ToolTip="Layer visibility"
Checked="Visible_Changed"
Unchecked="Visible_Changed"
/>
当用户在两个屏幕之间导航时,图层的可见属性将从后面的代码触发,复选框反映相同的内容。这些层的行为也应该如此。
问题在于,现在用户可以在任何屏幕上选择其中一个图层来更改图层的可见属性,在这种情况下,我必须更新该屏幕的图层列表。
当代码更改visible属性时,有没有办法让复选框不触发事件。我只希望在用户选中复选框时触发事件
答案 0 :(得分:3)
虽然您无法阻止事件被触发,但您可以将代码封装在处理程序中并检查bool
标志,当您手动调用时,您将其设置为true
代码:
<CheckBox Checked="CheckBoxChanged" Unchecked="CheckBoxChanged" />
...
private void CheckBoxChanged(object sender, RoutedEventArgs e)
{
if (!isNotLocalChange)
{
// the user changed the Checked value
}
}
...别处
isNotLocalChange = true;
// Do your programmatic change here
isNotLocalChange = false;