我正在尝试为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}" …Run Code Online (Sandbox Code Playgroud) 因此,在托管对象上实现Dispose(),通过从提示中获取提示来改善垃圾收集器的性能可能会绕过其整个过程.
我在一个没有得到高票的问题上看到了这个答案,但这是真的吗?如果是,那怎么样?
不,这是错的.我同意Aaronaught的观点.此外,Microsoft建议在2003年中期的Don Box网络广播中,每个.Net开发人员都应该处理他们自己的对象,无论是托管还是非托管,因为这会使代码性能提高20%.如果做得好,它可以显着改善性能.因此它是每个.net开发人员需要知道和使用的核心技能.