C# 是否可以在代码中更新数据模板?

C# 是否可以在代码中更新数据模板?,c#,uwp,datatemplate,C#,Uwp,Datatemplate,有没有办法在代码中更新数据模板 我有一个包含单个图像的简单数据模板。它用于第三方控件的ContentTemplate属性,以表示控件的可视图像。(我无法控制此要求。)以下是DataTemplate的XAML定义,其中包含一个通用的“未知”图像: 然而,我还没有找到一种方法来更新代码中的数据模板。这可能吗?或者有其他选择吗?正如其他用户在评论中建议的那样,最好使用DataTemplateSelector 首先,您需要派生DataTemplateSelector类,创建自己的类,并重写SelectT

有没有办法在代码中更新数据模板

我有一个包含单个图像的简单数据模板。它用于第三方控件的ContentTemplate属性,以表示控件的可视图像。(我无法控制此要求。)以下是DataTemplate的XAML定义,其中包含一个通用的“未知”图像:


然而,我还没有找到一种方法来更新代码中的数据模板。这可能吗?或者有其他选择吗?

正如其他用户在评论中建议的那样,最好使用
DataTemplateSelector

首先,您需要派生
DataTemplateSelector
类,创建自己的类,并重写
SelectTemplateCore
方法:

public class SampleDataTemplateSelector : DataTemplateSelector
{
    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        if (item != null && container != null && <<item is a specific object>>)
        {
            // Put your logic code here in order to determine what case is the right one
            if (<<case 1>>) return SampleDataTemplate1;
            else if (<<case 2>>) return SampleDataTemplate2;
            //…
        }
    }
}
公共类SampleDataTemplateSelector:DataTemplateSelector
{
受保护的覆盖数据模板SelectTemplateCore(对象项,DependencyObject容器)
{
如果(项!=null&&container!=null&&)
{
//将逻辑代码放在这里,以确定哪种情况是正确的
if()返回SampleDataTemplate1;
else if()返回SampleDataTemplate2;
//…
}
}
}
然后,将这些资源放在App.xaml(或页面的资源)中:


然后,在页面中,只需将其与ItemsControl派生控件一起使用。 下面是一种在ListView中使用它的方法:

<ListView ItemsSource="{x:Bind ViewModel.Elements, Mode=OneWay}" ItemTemplateSelector="{StaticResource SampleTemplateSelector}" HorizontalContentAlignment="Stretch"/>


致以最诚挚的问候

您能使用
DataTemplateSelector
吗?您是否尝试过@Raymond Chen的建议使用
DataTemplateSelector
public class SampleDataTemplateSelector : DataTemplateSelector
{
    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        if (item != null && container != null && <<item is a specific object>>)
        {
            // Put your logic code here in order to determine what case is the right one
            if (<<case 1>>) return SampleDataTemplate1;
            else if (<<case 2>>) return SampleDataTemplate2;
            //…
        }
    }
}
<Application.Resources>
    <templateSelectorNamespace:SampleDataTemplateSelector x:Key="SampleTemplateSelector"/>

    <DataTemplate x:Key="SampleDataTemplate1">
        <Image Source="Assets/Image1.png"/>
    </DataTemplate>
    <DataTemplate x:Key="SampleDataTemplate2">
        <Image Source="Assets/Image2.png"/>
    </DataTemplate>
</Application.Resources>
<ListView ItemsSource="{x:Bind ViewModel.Elements, Mode=OneWay}" ItemTemplateSelector="{StaticResource SampleTemplateSelector}" HorizontalContentAlignment="Stretch"/>