WPF MessageBox 取消复选框检查

WPF MessageBox Cancel checkbox check

我刚刚遇到一个我自己无法解决的问题。所以希望有人能给我一些想法。

我的问题:

所以我有一个绑定到 class 变量的复选框:

//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 将显示按钮 OKCancel .

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

mod.IsChecked = value;

然而,由于 UI 在 MessageBox 出现之前尚未完成,它将在 MessageBox 关闭后 完成 UI 检查控制器 (我假设在检查绑定后)。

刚刚单击了切换复选框(第一个),但 UI 线程暂停,因为它等待 MessageBox 的 InvokeEnd。


我希望我已经把我的问题说清楚了。我不是线程方面的专家,尤其是 WPF/Form。所以希望有人能在正确的方向上帮助我。

非常感谢,Nkmol

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

旁注;在我看来,你 "data-binding" 的样子 "different"。为什么不在复选框的 setter 中实现 INotify属性Changed 和 Notify属性Changed?你现在做这件事的方式似乎违反了 MVVM。希望这对您有所帮助,祝您好运!