gpt4 book ai didi

wpf - 定义嵌套 View 的标准约定是什么:viewmodel mapping in MVVM Light

转载 作者:行者123 更新时间:2023-12-02 04:41:55 24 4
gpt4 key购买 nike

在经典的 MVVM 示例中,我看到 DataTemplate 定义用于将 View 模型映射到 View ,在 MVVM Light 框架中执行此操作的标准方法是什么?映射应该位于哪里?以下是我现在正在做的事情和我正在谈论的示例,可混合性对我来说很重要!

主窗口:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="STS2Editor.MainWindow"
Title="{Binding ApplicationTitle, Mode=OneWay}"
DataContext="{Binding RootViewModel, Source={StaticResource Locator}}">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skins/ApplicationSkin.xaml" />
<ResourceDictionary Source="Resources/ViewMappings.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<ContentControl Content="{Binding ApplicationManagementViewModel}" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>
</Window>

在上面的代码中,我的 RootViewModel 类有一个具有相同属性名称的 ApplicationManagementViewModel 类的实例:

public ApplicationManagementViewModel ApplicationManagementViewModel {get {...} set {...} }

我引用 ResourceDictionary“ViewMappings.xaml”来指定我的 View 模型如何表示为 View 。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:STS2Editor.ViewModel">
<DataTemplate DataType="{x:Type local:ApplicationManagementViewModel}">
<local:ApplicationManagementView/>
</DataTemplate>
</ResourceDictionary>

我应该使用 ViewModelLocator 做这样的事情吗? View 模型的集合怎么样?

最佳答案

您使用的方法(使用隐式类型的 DataTemplates)在 WPF 中工作正常,但不幸的是它在 Silverlight 中不起作用。这就是为什么我更喜欢使用一种在两个领域都有效的更明确的方法的原因之一。

此外,隐式类型的 DataTemplate 可能会有点令人困惑,因为模板的来源并不总是很清楚。这有时会使集成商的工作变得非常困难,特别是对于 UI 的微小更改(曾经在那里,完成过:)

没有义务在 MVVM Light 中使用 ViewModelLocator,它只是一种运行良好且非常容易理解的方式(对于不熟悉 WPF/SL 微妙之处的阅读代码的人来说)。最后,这在很大程度上是一个偏好问题,但最近 ViewModelLocator 模式似乎越来越受欢迎(例如,请参阅这篇文章,其中通用 ViewModelLocator 与 MEF 一起使用)。

http://www.johnpapa.net/simple-viewmodel-locator-for-mvvm-the-patients-have-left-the-asylum/

最后,我要补充一点,我对 MVVM Light 中 ViewModelLocator 目前的实现不是很满意,我想在下一个版本中提出一个更通用的解决方案。

关于wpf - 定义嵌套 View 的标准约定是什么:viewmodel mapping in MVVM Light,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2661198/

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