gpt4 book ai didi

c# - 如何将我的自定义用户控件及其自定义 View 模型包含到我的 xaml View 中?

转载 作者:行者123 更新时间:2023-12-05 06:22:41 25 4
gpt4 key购买 nike

一般来说,我对 prism/xaml 有一点疑问。如果有人有线索,我很乐意知道。

我使用 Prism 模块 (Prism 6.3.0) 构建了一个标准的 Prism 应用程序。我有一个包含以下代码的主视图:

<!-- MainView.xaml -->
<UserControl prism:ViewModelLocator.AutoWireViewModel="True"
...>
[...]
<dxb:BarManager>
[...]
<local:MyUserControl/>
[...]
</dxb:BarManager>
</UserControl>

在那个 View 中,你注意到

<local:MyUserControl/>

那个东西实现如下:

<!-- MyUserControl.xaml -->

<dxr:RibbonPageGroup x:Class="MyUserControl" ...>
[...]

<dxb:BarButtonItem Content="Import"
Command="{Binding ImportDataCommand}" />
[...]
</dxr:RibbonPageGroup>

// MyUserControl.xaml.cs
public partial class MyUserControl
{
public MyUserControl()
{
InitializeComponent();
}
}

现在,想法是 MyUserControl 使用自己的 View 模型,因为它需要包含与特定控件相关的特殊逻辑。所有这些逻辑都由接口(interface) IMyUserControlViewModel 定义,我想将其注入(inject)到 MyUserControl 中并使其作为其 DataContext 可用。当然,实现 IMyUserControlViewModel 并且我想将其注入(inject)到 View 中的 MyUserControlViewModel 在服务中具有依赖性。我怎样才能把它连接起来?我尝试了很多事情都没有成功。我很清楚 these advanced ways of wiring upthese basic ways of wiring up .我猜这是不可能的,因为在 MainView.xaml 中,我们使用

prism:ViewModelLocator.AutoWireViewModel="True"

我没看错吧?如果没有,我的想法怎么实现?是否可以在不更改 ViewModelLocator 的配置的情况下进行操作,如 here 所解释的那样?在我工作的项目中,由于一些不明原因,他们希望坚持使用自动 View 模型布线。有没有办法覆盖模块初始化代码中的自动 View 模型布线?我说的模块初始化代码是这样的

public class MyModule : IModule
{
private readonly IUnityContainer _container;
private readonly IRegionManager _regionManager;

public MyModule (IUnityContainer container, IRegionManager regionManager)
{
_container = container;
_regionManager = regionManager;
}

public void Initialize()
{
//_container.RegisterType<>();

_regionManager.AddToRegion(RegionNames.MainRegion, ServiceLocator.Current.GetInstance<MainView>());
}
}

最佳答案

作为一般规则,如果可以的话,首先尝试查看模型,因为它使事情变得更容易和更清晰。

所以在你的情况下,而不是

<UserControl prism:ViewModelLocator.AutoWireViewModel="True">
<dxb:BarManager>
<local:MyUserControl/>
</dxb:BarManager>
</UserControl>

<UserControl prism:ViewModelLocator.AutoWireViewModel="True">
<dxb:BarManager>
<ContentControl Content={Binding SpecialViewModel}/>
</dxb:BarManager>
</UserControl>

使用 DataTemplateIMyUserControlViewModel 映射到 MyUserControl 并从您的 View 模型中公开 subview 模型的实例。通过这种方式,您可以使用专门的实例,为手头的用例量身定制,而不必为了取悦 ViewModelLocator 而跳转循环。

关于c# - 如何将我的自定义用户控件及其自定义 View 模型包含到我的 xaml View 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58978616/

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