WPF MessageBox取消复选框检查

时间:2015-06-05 11:39:49

标签: c# wpf multithreading messagebox data-binding

我刚刚遇到一个我无法解决的问题。所以希望任何人都可以给我一些想法。

我的问题:

所以我有一个复选框,它绑定了一个类变量:

//WPF
<CheckBox IsChecked="{Binding IsChecked}" Name="cb" />

//class
public class Mod
{
    bool _IsChecked;
    public bool IsChecked { get { return _IsChecked; } set { MainWindow.w.checkChanged(this, value); _IsChecked = value; } }
}

现在我的目标是,当我点击任何一个复选框时,它将执行一个方法。此方法将检查不同的内容,最终如果不符合检查, MessageBox 将显示按钮确定取消

当用户单击取消时,我想通过在对象上使用我的绑定来取消复选框检查。

mod.IsChecked = value;

但是因为在MessageBox显示之前UI没有完成,所以在 MessageBox关闭之后它将完成UI检查控制器(我假设它检查了Binding之后)。

Check boxes have been clicked

刚刚单击了Toggle复选框(3中的第一个),但UI线程处于暂停状态,因为它等待MessageBox的InvokeEnd。

我希望我的问题足够明确。我不是线程专家,尤其不是WPF / Form。所以希望有人可以帮助我朝着正确的方向前进。

非常感谢,Nkmol

1 个答案:

答案 0 :(得分:1)

如果我理解这一点,我最初的想法是从复选框的属性(在ViewModel中)的setter中调用该方法。从那里,您应该具有旧值以及复选框的新值以及对您要执行的操作的完全控制(在这种情况下弹出消息框)。有很多方法可以做到这一点(here's one way)。

侧面说明;你对“数据绑定”的方式对我来说似乎“不同”。为什么不在复选框的setter中实现INotifyPropertyChanged和NotifyPropertyChanged?你现在这样做的方式似乎违反了MVVM。希望这有帮助,祝你好运!