gpt4 book ai didi

xaml - UWP MVVM XAML 动态用户控制管理器

转载 作者:行者123 更新时间:2023-12-01 04:41:58 25 4
gpt4 key购买 nike

我需要改变观点的帮助。

我在尝试以以前在 WPF 中使用的方式处理 UWP 时遇到困难,涉及用于动态管理 UserControl 的 MVVM 模式。

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

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

下面是一个如此简单的方法来管理所有地方的许多 View ,奇怪的 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>

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

最佳答案

查看 DataTemplate文档中,有一段解释了您要弄清楚的情况。

For advanced data binding scenarios, you might want to have properties of the data determine which template should produce their UI representations. For this scenario, you can use a DataTemplateSelector and set properties such as ItemTemplateSelector to assign it to a data view. A DataTemplateSelector is a logic class you write yourself, which has a method that returns exactly one DataTemplate to the binding engine based on your own logic interacting with your data. For more info, see Data binding in depth.

Here ,您有一个示例,说明如何根据定义的条件为控件(例如 ListView)中的项目选择不同的 DataTemplate

你的情况和上面描述的有点不同,但是解决方法应该在上面解释的范围内。

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

有了这个逻辑,您的 ContentPresenter 应该可以根据您所需的 UI 逻辑正确决定它应该从哪个 DataTemplate 中选择。

关于xaml - UWP MVVM XAML 动态用户控制管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49611820/

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