gpt4 book ai didi

时间:2019-05-10 标签:c#mvvm正确的事件处理

转载 作者:行者123 更新时间:2023-12-03 10:35:22 25 4
gpt4 key购买 nike

我已经在我的 WPF 窗口中实现了 MVVM 模式。我有一个子窗口,我用以下方式调用它(来自另一个 ViewModel):

cmd_Show = new DelegateCommand(
(sender) =>
{
frm_Strediska _window = new frm_Strediska();
frm_StrediskaViewModel vm = new frm_StrediskaViewModel(ZakladneStrediska, _window);
_window.DataContext = vm;
_window.Owner = App.Current.MainWindow;

_window.ShowDialog();
});

frm_StrediskaViewModel 下我挂上了 Window.Closing事件通过以下方式:
public frm_StrediskaViewModel(ObservableCollection<DefaultStrediska> _Strediska, frm_Strediska _Window)
{
Window = _Window;
Strediska = _Strediska;

InitializeCommands();

Window.Closing += Window_Closing;
}

我不确定的是,当我关闭这个子窗口时,如果我的 Window.Closing事件自动解除 Hook ,否则我必须覆盖 Dispose() ViewModel 上的事件(这就是我现在正在做的事情):
protected override void Dispose(bool disposing)
{
Window.Closing -= Window_Closing;
this.Dispose();
}

这是一个好方法,还是完全没有必要?

最佳答案

有一种方法可以通过简洁的绑定(bind)来实现,但它需要 Blend SDK。您需要 System.Windows.Interactivity.dll为了这。首先需要添加命名空间声明:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

通过此导入,您可以将命令绑定(bind)到如下事件:
<i:Interaction.Triggers>
<i:EventTrigger EventName="Closing">
<i:InvokeCommandAction Command="{Binding CloseCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>

将此添加到您的窗口将导致命令与 CloseCommand 绑定(bind)。执行一次 Closing - 事件由窗口引发。

因此,您不需要自己对事件进行任何绑定(bind)。您可以在返回命令的 ViewModel 中创建所需的属性。该命令必须执行关闭期间所需的任何操作。所以基本上你目前在事件处理程序中得到了什么。
public readonly ICommand CloseCommand
{
get { return /* Your closing command here */; }
}

我希望这会有所帮助。

关于时间:2019-05-10 标签:c#mvvm正确的事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32114125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com