3

我需要帮助来改变观点。

我被困在试图以我在 WPF 中使用的用于动态管理 UserControls 的 MVVM 模式的方式接近 UWP。

我很自然地尝试在 UWP 中执行相同的模式,但遇到了各种问题,例如 UWP 不支持“x:Type”......

情况是;是时候重新考虑这种方法并寻找新的方向了。似乎我被迫放弃以与 WPF 模式类似的方式使用隐式绑定,使用ContentPresenter的Content属性和维护选定 ViewModel 的 VM 属性“对象类型”。这是一种简单而干净的方法,可以自动将正确的视图与 ActiveViewModel 中设置的 VM 匹配。

下面是一种管理各地许多视图的简单方法,奇怪的 MS 没有解决这个问题?但是,回到大问题:UWP 中现在有什么!?

<ContentPresenter Content="{Binding ActiveViewModel}">
    <ContentPresenter.Resources>
        <DataTemplate DataType="{x:Type local:OneViewModel}">
            <local:OneView />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:TwoViewModel}">
            <local:TwoView />
        </DataTemplate>
    </ContentPresenter.Resources>
</ContentPresenter>

我该怎么做而不是这个!?有人找到了一种新的有效方法吗?我陷入了顽固的头脑中,需要有人来踢我的屁股,所以我继续前进。变老才能改变,但由于这个职业,我似乎经常不得不改变。:)

4

1 回答 1

1

查看DataTemplate文档,有一段解释您试图弄清楚的情况。

对于高级数据绑定方案,您可能希望数据的属性确定哪个模板应该生成它们的 UI 表示。对于这种情况,您可以使用 DataTemplateSelector 并设置 ItemTemplateSelector 等属性以将其分配给数据视图。DataTemplateSelector 是您自己编写的一个逻辑类,它有一个方法可以根据您自己与数据交互的逻辑将一个 DataTemplate 返回到绑定引擎。有关详细信息,请参阅深入的数据绑定。

在这里,您有一个示例,说明如何DataTemplate为控件中的项目选择不同的,例如ListView基于定义的条件。

您的情况与上述情况略有不同,但解决方案应在上述说明范围内。

  • 创建一个派生自 的类DataTemplateSelector,并覆盖SelectTemplateCore它公开的方法,您可以在其中定义DataTemplate应为特定呈现对象选择的逻辑。
  • 这个 Derived 类应该公开 type 的属性DataTemplate,这些属性标识每个DataTemplate模板对象,您假装可以从中进行选择。
  • 就像在示例中一样,您可能最好DataTemplate在更高级别的对象上定义资源,例如页面本身。
  • 将 XAML 中的 Derived 类实例DataTemplateSelector化为资源,并将上面公开的 DataTemplate 类型的每个属性设置为类似的DataTemplate静态资源。
  • 通过将其设置为您的自定义 DataTemplateSelector 来利用ContentTemplateSelector依赖项属性。

使用此逻辑,您应该可以根据您所需的 UI 逻辑ContentPresenter正确决定应该选择哪个。DataTemplate

于 2018-04-03T10:19:49.030 回答