gpt4 book ai didi

wpf - MVVM 窗口/区域处理

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

这里有两个问题。

我的 View 有一个“关闭”按钮,单击该按钮时,窗口应该关闭。我按如下方式处理:我的 View 中的按钮绑定(bind)到 View 的 View 模型中定义的命令,触发时运行以下命令:

    private void Exit()
{
var regionManager = Container.Resolve<IRegionManager>();
MyView existingView = regionManager.Regions["MyWindowRegion"].GetView("MyView") as MyView;

if (existingView != null)
{
regionManager.Regions["MyWindowRegion"].Remove(existingView);
}
}

这个可以吗? View 模型现在是否对 View 了解太多(例如它的名称和类型)?

与第一个问题类似,在我的模块工具栏中,如果我点击“启动模块”按钮,它将创建/显示一个 View 。我这样做是为了如果 View 已经可见,而不是再次创建它, View 模型只会使现有的 View 成为焦点:
    private void LaunchMyView()
{
var regionManager = Container.Resolve<IRegionManager>();
MyView existingView = regionManager.Regions["MyWindowRegion"].GetView("MyView") as MyView;

if (existingView == null)
{
MyView view = Container.Resolve<MyView>();
view.Title = "MyView Title";
regionManager.Regions["MyWindowRegion"].Add(view, "MyView");
}
else
{
regionManager.Regions["MyWindowRegion"].Activate(existingView);
}
}

同样的问题。 View 模型是否对 View 了解太多?

顺便说一句,我正在使用 WindowsRegionAdapter处理新 View 的创建。

谢谢。

最佳答案

严格来说,ViewModel 对代码中的 View 一无所知,但它确实知道正在工作的 RegionManager(嗯,从容器中获取它)。

就个人而言,对于这种事情,我更喜欢使用中介者模式来简单地从 ViewModel 发布消息,例如“OK,我到此为止”。区域管理器对象将订阅这些消息并酌情处理关闭。通过这种方式,您已将代码移出 ViewModel,并希望您对 VM 无法“看到” View 感到更好。

在 Prism 中,我们使用一个名为 EventAggregator 的类。发布/订阅类型为 CompositeWpfEvent<TPayload>

关于wpf - MVVM 窗口/区域处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807316/

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