你好,我遇到问题了,我不知道是什么原因造成的,
<ListView.View>
<GridView>
<GridViewColumn.CellTemplate>
<DataTemplate><CheckBox IsChecked="{Binding IsAssignedToThis,IsAsync=True}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
Checked
和Unchecked
事件
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
MessageBox.Show("Checked");
//some code
}
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
MessageBox.Show("unChecked");
//some code
}
在IsChecked
中,值是bool
类型,它们工作正常,因为它标记了CheckBoxes
,但是当我尝试取消选中它时,会同时触发已选中和未选中的事件。我想念什么?
答案 0 :(得分:1)
是的,我转载了您的问题。一些测试显示了异步绑定中的问题。
我认为这是一个有趣的情况。
让我们开始解释。 应用程序启动,未选中该复选框。用户检查我们的元素。活动分步进行。
很酷。用户未选中的复选框。
我的测试代码。 ViewModel和后面的代码
public class TestView
{
private bool _test;
public bool TestProp
{
get => _test;
set
{
Console.WriteLine("Start set value");
Thread.Sleep(5000);
_test = value;
Console.WriteLine("End set value");
}
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new TestView();
}
private void ToggleButton_OnChecked(object sender, RoutedEventArgs e)
{
Console.WriteLine("Checked");
}
private void ToggleButton_OnUnchecked(object sender, RoutedEventArgs e)
{
Console.WriteLine("Unchecked");
}
}
Xaml部分
<Grid>
<CheckBox Checked="ToggleButton_OnChecked" IsChecked="{Binding TestProp, IsAsync=True}" Unchecked="ToggleButton_OnUnchecked"></CheckBox>
</Grid>
您可以使用“单击”事件(但是如果用户将使用键盘来更改复选框值,则单击事件不会引发)或在属性设置器中调用事件逻辑。它将更适用于MVVM。
答案 1 :(得分:0)
为了避免这种情况的发生,每次建议弹出两个事件,我建议使用一个更改信号为两个事件设置相同的处理程序,如下所示:
<CheckBox Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>
private void CheckBoxChanged(object sender, RoutedEventArgs e)
{
MessageBox.Show("State has been changed.");
}