I show a WPF window using ShowDialog() from the calling window. The window opens and is modal as expected. However, in my OK and Cancel button's click events in the dialog window I set this.DialogResult = true (or false) respectively, and the value does not get set. The window closes as expected, but DialogResult is still null.
Is this a bug in WPF? Or is there a reason the DialogResult property cannot be set yet does not throw an exception? The window is not hosted in a browser.
Code in the calling window:
Window2 win = new Window2();
bool? result = win.ShowDialog();
if (result.HasValue && result.Value) {
//never gets here because result is always null
}
Code in the dialog window:
this.DialogResult = true;
I had a similar issue, but my issue came from the code within my closing statement. I was trying to Dispose() a List before the window closed, and then set the List<> property to null... it was choking on the set property when I was trying to set its value to null so I came up with the following clumsy workaround in my set property method and everything worked afterward:
Well first of all you have to take into account that it returns a nullable bool (bool?), so in order to compare it or set it to another variable you have to cast it to a regular bool
As for it being null... I don't see why that should happen, unless it's somehow being set back to null AFTER being set to true or false. Can you show your code?
EDIT:
Your code worked fine for me, this is what I have in the second window:
And in Window1:
Is there any big difference?
The problem is due to the life of the form:
Dialog event private void _loginViewModel_LoginEvent(object sender, LoginViewModel.LoginEventArgs e) { DialogResult = true; this.Close(); }
Works:
Does NOT work:
DialogResult
is a nullable bool. However you do not have to cast it to get it's value.The ?? sets the default value to return if the result is null. More information: Using Nullable Types (C# Programming Guide)
As for the original question, the only time I have seen and traced this issue is when the window was being disposed between setting the DialogResult and closing the window. Unfortunately the only advice that I can offer is for you step through your code and check the order of the operations. I believe that I "fixed" it by setting the
DialogResult
and then explicitly closing the window.Do you close the window before u set the DialogResult? You should post the whole content of your button event-handlers.
I have been into this problem too, and the only way i have found to fix it was using this code in my Class :
and after setting my DialogResult it work out for me !! ( very strange issue ). this was the code i was using :
and to open my dialog :