数据模板、加载内容和数据触发器未触发

5

我有一个自定义的UserControl,其中有一个名为“ItemTemplate”的DependencyProperty,类型为“DataTemplate”。我通过.LoadContent()创建了此ItemTemplate的实例,分配了.DataContext并将其放置在ContentControl中。唯一的缺点是DataTemplate.Triggers不会被触发。

Xaml代码示例:

<Window.Resources>
    <DataTemplate x:Key="MyTemplate">
        <Label Name="MyLabel" Content="Default"/>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding}" Value="1">
                <Setter TargetName="MyLabel" Property="Content" Value="True" />
            </DataTrigger>
            <DataTrigger Binding="{Binding}" Value="0">
                <Setter TargetName="MyLabel" Property="Content" Value="False" />
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>        
</Window.Resources>

<ContentControl x:Name="MyContent" />

示例代码如下:

private void Window_Loaded(object sender, RoutedEventArgs e) {
    var template = FindResource("MyTemplate") as DataTemplate;

    var instance = template.LoadContent() as FrameworkElement;
    instance.DataContext = "1";
    MyContent.Content = instance;
}

输出为“默认值”。 在ListBox中使用相同的DataTemplate可以正常工作:
<ListBox x:Name="MyListBox" ItemTemplate="{StaticResource MyTemplate}" />

代码后台:

MyListBox.ItemsSource = new[] { "1", "0" };

输出是“True”和“False”。

有什么想法可以触发DataTemplate.Triggers吗?我需要手动循环所有触发器并执行它们吗?如果是,我如何评估触发器?

提前感谢,

克里斯蒂安

1个回答

4

将您的DataTemplate应用于ContentControl,而不是像您正在做的那样即时修改它:

MyContent.ContentTemplate = FindResource("MyTemplate") as DataTemplate;
MyContent.Content = "1";

没错,就是这个小错误(你原本想写MyContent.Content = "1"(或者"0"))。谢谢! - Christian Birkl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接