UWP MVVM XAML动态用户控件管理器

我需要帮助改变观点.

我试图以一种我曾经在WPF中关于用于动态管理UserControl的MVVM模式的方式尝试接近UWP.

我自然试图在UWP中执行相同的模式,但却遇到了各种各样的问题,比如UWP不支持’x:Type’……

情况是;是时候重新考虑这种方法并寻找新的方向.似乎我不得不放弃以类似于WPF模式的方式使用隐式绑定,使用ContentPresenter的Content属性和Object类型的VM属性,它们维护选定的ViewModel.这是一种简单而干净的方法,可以将正确的View与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>

我该怎么做而不是这个!?有人找到了一种新的有效方法吗?我陷入了顽固的心灵,需要有人踢我的屁股,所以我往前走.变老,但由于这个职业,我似乎经常不得不这样做. 🙂

最佳答案 查看
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的逻辑.
>此Derived类应公开DataTemplate类型的属性,这些属性标识每个单个DataTemplate模板对象,您假装可以从中进行选择.
>就像在示例中一样,通过在更高级别的对象(例如Page本身)上定义DataTemplate资源,您可能会更好.
>将XAML中的DataTemplateSelector派生类实例化为资源,并将上面公开的DataTemplate类型的每个属性设置为类似的DataTemplate静态资源.
>利用ContentTemplateSelector依赖项属性,将其设置为自定义DataTemplateSelector.

有了这个逻辑,应该可以让您的ContentPresenter根据您所需的UI逻辑正确地决定它应该在哪个DataTemplate之间进行选择.

点赞