Wpf中的DialogResult问题

时间:2011-07-18 13:54:31

标签: c# wpf showdialog dialogresult

我有一个窗口,我作为ShowDialog打开了几次。

每次打开它我都会使用new关键字 在我第一次做的时候:

var myWindow = new MyWindow();
myWindow.ShowDialog();

我第二次从MyWindow View Model类打开它:

new MyWindow().ShowDialog();
在MyWindow代码背后的

我有2个事件。一个是用户clcik ok,另一个是用户点击取消时。

void OnCancel(){
  DialogResult = false;
}

void OnOk(){
  DialogResult = true;
}

事件从视图模型类触发,形成ICommand执行,而不是绑定到窗口的“ok”和“cancel”按钮。

在xaml中,我为取消按钮执行了此操作:

IsCancel = true;

这就是ok按钮:

IsDefault = true;

在我第一次打开窗口时我可以设置DialogResult = true,但在此之后我尝试设置DialogResult时我得到了异常“Dialofresult只能在创建窗口后设置并显示为ShwDialog”。

我也看到DialogResult在第一次设置为true后是真的,我认为异常的原因但是我不明白为什么如果我关闭窗口并使用新的创建一个新的一个是真的关键字...

任何建议

提前致谢

修改 问题是,一旦我按下“ok”按钮,DialogResult设置为true并且saty为true,我无法将其设置为false。

修改

谢谢大家,我解决了这个问题。

问题是我注册了View Model事件(单击“ok”并点击“取消”)当用户点击“取消”时我删除了注册,但是当他点击“ok”时我没有...

2 个答案:

答案 0 :(得分:2)

设置DialogResult会关闭窗口,因此您无法再次设置DialogResult

BTW,new Window().ShowDialog()返回bool?,而不是窗口......

答案 1 :(得分:1)

  

如果我关闭窗口并创建,我不明白为什么会保持原样   使用新关键字新的一个...

因为您正在初始化一个新窗口。它返回True,因为你已经第一次解释了它。