gpt4 book ai didi

WPF + MvvM + Prism

转载 作者:行者123 更新时间:2023-12-04 23:32:44 28 4
gpt4 key购买 nike

我是 Wpf & Mvvm 世界的新手,但我找到了几个例子,只是发现有一些不同的方法来实例化模型。我想知道最好/正确的方法来做到这一点。两种方式都在使用 Unity

我吃过的东西:

var navigatorView = new MainView();
navigatorView.DataContext = m_Container.Resolve<INavigatorViewModel>();
m_RegionManager.Regions["NavigatorRegion"].Add(navigatorView);

我做了什么:
var navigatorView = m_Container.Resolve<MainView>;
m_RegionManager.Regions["NavigatorRegion"].Add(navigatorView);

我更改了构造函数以接收 View 模型,以便我可以将数据上下文指向它:
public MainView(NavigatorViewModel navigatorViewModel)
{
this.DataContext = navigatorViewModel;
}

其他示例我发现了另一种方式,例如:
...vm = new viewmodel 
...m = new model
v.model = vm;

获取/设置数据上下文

干杯

最佳答案

我喜欢 Igor 的建议,但没有 View 模型了解 View 。我更喜欢我的依赖项朝一个方向发展( View -> ViewModel -> 模型)。

我所做的是 ViewModel-First 和 DataTemplate View 模型。所以我这样做:

MainViewModel mainViewModel = container.Resolve<MainViewModel>();

region.Add(mainViewModel, "MainView");
region.Activate(mainViewModel);

添加 ViewModel -> 使用 WPF 数据模板完成的 View 映射(不过,我认为 Silverlight 无法实现这种方法)

应用程序.xaml:
<Application.Resources>
<DataTemplate DataType="{x:Type viewModels:MainViewModel}">
<views:MainView />
</DataTemplate>
</Application.Resources>

就是这样!我喜欢这种方法。我喜欢这种感觉就像魔法一样。它还具有以下优点:
  • 不必修改构造函数以适应映射
  • 不必在容器中为 IMyViewModel 注册类型……您可以使用具体类型。我喜欢保留对 IViewRegistry 或 ILogger 等应用程序服务的注册...诸如此类的事情
  • 您可以使用范围限定为某个区域所在的特定 View 的资源来更改映射(如果您想重用 ViewModel 但希望它们在应用程序的不同区域看起来不同,这很好用
  • 关于WPF + MvvM + Prism ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2774203/

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