我正在使用Prism InteractionRequest关闭视图。 这是window.xaml中的xaml代码示例:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:prism="http://prismlibrary.com/"
<i:Interaction.Triggers>
<prism:InteractionRequestTrigger SourceObject="{Binding CloseRequest}" >
<ei:CallMethodAction MethodName="Close" TargetObject="{Binding ElementName=window}" />
</prism:InteractionRequestTrigger>
</i:Interaction.Triggers>
这是视图模型中的c#代码。
public InteractionRequest<Notification> CloseRequest { get; private set;} = new InteractionRequest<Notification>();
private DelegateCommand _closeCommand;
public DelegateCommand CloseCommand => _closeCommand ??
(_closefirmCommand = new DelegateCommand(
() => {
DialogResult = true;
CloseRequest.Raise(new Notification());
//CloseRequest = null
}
));
请注意,窗口不是应用程序的MainWindow,糟糕的是,窗口和视图模型将不会被垃圾收集:)关闭窗口并强制GC收集之后,这些对象将在收集时被收集。而且只有当我关闭MainWindow或将CloseRequest设为null时(请参见ViewModel中的注释代码),我保证MainWindow不会引用这些对象,并且我使用的是Arizona6.3,如果能任何人都可以帮助我:)