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