我正在尝试为WPF表单关闭实现此 MVVM模式,这也在本博客中进行了解释,我收到System.InvalidOperationException,错误消息"只有在创建Window并显示为对话框后才能设置DialogResult".当我尝试在关闭按钮命令上设置对话框结果时:
DialogResult = true;
Run Code Online (Sandbox Code Playgroud)
这是我的ViewModel:
class MainWindowViewModel:INotifyPropertyChanged
{
private bool? dialogResult;
public bool? DialogResult
{
get { return dialogResult; }
set
{
if (value != this.dialogResult)
{
this.dialogResult = value;
OnPropertyChanged("DialogResult");
}
}
}
public string Text
{
get { return "Hello!"; }
}
void CloseCommandExecute()
{
this.DialogResult = true;
}
Run Code Online (Sandbox Code Playgroud)
这是XAML视图:
<Window x:Class="WpfApplication.Mvvm.Windowclosing.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication.Mvvm.Windowclosing"
local:DialogCloser.DialogResult="{Binding DialogResult}"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Text}" Grid.Row="0"/>
<Button Grid.Row="1" Command="{Binding CloseCommand}">Close Me</Button>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
小智 23
设置对话框结果仅在使用ShowDialog()打开表单时有效.当您尝试在使用Show()打开的窗体上设置对话框结果时,会出现此错误.
Unp*_*lug 16
当我创建一个被调用的窗口时,我遇到了这个问题ShowDialog().在窗口中,我有一个Ok_Clicked包括一堆语句.为了'保证',如果有任何错误,对话框返回false我首先将其初始化DialogResult为false.如果一切正常,我会设置DialogResult为true并关闭窗口.我一直得到同样的例外.
我了解到,如果DialogResult未设置为true,则ShowDialog总是返回false.当我DialogResult = false在开头删除时Ok_Clicked,我不再得到例外.
对于使用ShowDialog的用户,您可以从按钮中删除属性:
IsCancel = true且 IsDefault = true
| 归档时间: |
|
| 查看次数: |
14405 次 |
| 最近记录: |