【问题标题】:How to update a DataTemplate dynamically based on a object property?如何根据对象属性动态更新 DataTemplate?
【发布时间】:2021-08-13 13:07:25
【问题描述】:

我有一组具有不同呈现选项的对象:它们可以是简单文本、可编辑文本、组合框或混合包(例如组合框,其中项目通常是文本,但带有特定值的图像)。

我设法在ListViewItem.ItemTemplateDataTemplate 内的ContentPresenter 节点内使用ContentTemplateSelector 正确显示所有内容:

<ContentPresenter 
    Grid.Row="1"
    Grid.Column="1"
    Content="{Binding .}"
    ContentTemplateSelector="{DynamicResource ResourceKey=RenderTemplateSelector}"/>

(请注意,所有内容都在ListView.ItemTemplateDataTemplate 内)

在我更改所述属性的值并需要更改模板之前,一切都很好,例如从图像变为文本。 VM 确实正确更新了这些值,但 GUI 中没有任何反应。

环顾四周有几种方法(使用Converter(绑定到哪个属性??),定义Style(我认为不相关,因为我必须显示不同的控件,而不是更改属性同样的),使用AttachedProperty(我不太了解附加属性是如何工作的,但据我所见,我应该有一个ContentControl 节点,但我没有......)但我似乎没有什么需要。

所以,回顾一下:我有一个 ListView,它为每个 ListViewItem 定义了一个 DataTemplate,其中包含另一个需要根据 ListViewItem 对象的属性进行更改的 DataTemplate。我设法通过ContentTemplateSelector 实现了这一点,但它是在开始时分配的,然后从未改变过。

【问题讨论】:

  • 或者黑客可能会删除并重新将项目插入到列表中。
  • DataTemplates 通常在您希望通过数据type 指定视觉外观时使用。我需要更多地了解你想要做什么的细节,但听起来你真正需要的是让外观由 value 控制。如果是这样,那么您需要的是 DataTrigger。无论哪种方式,当您恢复使用代码隐藏时,无论是转换器还是模板选择器等形式,您都可能做错了!

标签: c# wpf xaml dynamic datatemplate


【解决方案1】:

您可以尝试将ContentPresenter 替换为具有StyleContentControl 和设置ContentTemplate 的数据触发器,例如:

<ContentControl Content="{Binding}">
    <ContentControl.Style>
        <Style TargetType="ContentControl">
            <Style.Triggers>
                <DataTrigger Binding="{Binding YourProperty}" Value="Type1">
                    <Setter Property="ContentTemplate" Value="{StaticResource template1}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding YourProperty}" Value="Type2">
                    <Setter Property="ContentTemplate" Value="{StaticResource template2}" />
                </DataTrigger>
                <!-- ... -->
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 2016-09-09
    • 2019-03-09
    • 1970-01-01
    • 2017-09-30
    • 2015-11-25
    • 2012-10-05
    • 2020-12-30
    相关资源
    最近更新 更多