gpt4 book ai didi

wpf - 在 View 模型类中访问统一容器

转载 作者:行者123 更新时间:2023-12-02 04:13:51 26 4
gpt4 key购买 nike

我有一个看起来像工具栏的外壳,并定义了我的主要区域(包装面板)。我需要做的是能够将小部件添加到外壳中,当单击小部件时,会打开一个新窗口( View )。以下是我到目前为止的内容:

我创建了一个向主区域添加 View 的模块类:

public class MyModule : IModule
{
protected IUnityContainer Container { get; private set; }

public MyModule(IUnityContainer container)
{
Container = container.CreateChildContainer();
}

public void Initialize()
{
var regionManager = Container.Resolve<IRegionManager>();
MyModuleView myModuleView = new MyModuleView();
regionManager.Regions["MainRegion"].Add(myModuleView);
}
}

这是 MyModuleView 的内容:
  <Grid>
<Grid.DataContext>
<vm:MyModuleVM/>
</Grid.DataContext>
<Button Content="My Module" Foreground="White" FontWeight="Bold" Command="{Binding Path=LaunchCommand}">
</Button>
</Grid>

View 模型 MyModuleVM:
  class MyModuleVM : ObservableObject
{
protected IUnityContainer Container { get; private set; }

public MyModuleVM()
{
}

RelayCommand _launchCommand;
public ICommand LaunchCommand
{
get
{
if (_launchCommand == null)
{
_launchCommand = new RelayCommand(() => this.LaunchTestView(),
() => this.CanLaunchTestView());
}
return _launchCommand;
}
}

private void LaunchTestView()
{
TestView view = new TestView();
view.Title = "Test View";
var regionManager = Container.Resolve<IRegionManager>();
regionManager.Regions["MyWindowRegion"].Add(view);
}

private bool CanLaunchTestView()
{
return true;
}
}

所以我的计划如下:
  • 创建实现的类
    IModule (MyModule) 并让它加载一个
    查看(MyModuleView)进入外壳
    初始化时
  • 为模块创建 View 模型
    (MyModuleVM) 并将其设置为
    中显示的 View 的 DataContext
    外壳
  • MyModuleVM 包含一个命令
    MyModuleView 中的按钮绑定(bind)到。
    当按钮被点击时
    命令被触发
  • 现在,这就是我卡住的地方。使用
    一个 WindowRegionAdapter(一个适配器
    这有助于在
    单独的窗口)我想创建
    并显示一个新 View 。如所见
    MyModuleVM、LaunchTestView 需要
    访问容器,以便
    将 View 添加到区域。我怎么样
    应该到达容器?

  • 除了我关于访问容器的具体问题之外,我将“小部件”添加到工具栏外壳并启动的总体策略如何
    点击时的浏览量?当谈到使用 Prism 的 MVVM 时,我是否完全偏离了轨道?

    多谢你们。

    最佳答案

    可以通过constructor获取注入(inject)的容器或 property injection .为此,ViewModel 实例必须是 resolved由容器或 BuildUp方法应该在实例化后调用。

    我希望这有帮助。

    谢谢,
    达米安

    关于wpf - 在 View 模型类中访问统一容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781205/

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