DataTemplate检查绑定是否存在

本文关键字:存在 是否 绑定 检查 DataTemplate | 更新日期: 2023-09-27 18:26:10

我在ResourceDictionary中制作了一个按钮样式作为DataTemplate。这里有一小部分:

    <Style TargetType="{x:Type Button}">
    <Setter Property="Focusable" Value="False"></Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="border">
                    ...
                </Border>
                <ControlTemplate.Triggers>
                    <DataTrigger Binding="{Binding IsSelected}" Value="True">
                        <Setter Property="Background" TargetName="border" Value="Red" />
                    </DataTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

在此模板中,a具有到属性IsSelected的绑定。这个Propertie在那里处于一种情况,而在另一种情况下则不然。

如果绑定路径存在,是否可以签入Xaml,然后在其他情况下使用它?现在我在Debug输出中有BindingExpression,我想消除它。

DataTemplate检查绑定是否存在

更相关的问题是:为什么ControlTemplate中有DataTrigger?这在控件及其数据上下文之间创建了依赖关系,这就是为什么当数据上下文与控件模板的期望不匹配时会遇到此问题。

你确定不能使用更合适的机制吗?例如,您是否可以为IsSelected应该影响Background的按钮使用样式?

<Style x:Key="SpecialButtonStyle" TargetType="Button">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsSelected}" Value="True">
            <Setter Property="Background" Value="Red" />
        </DataTrigger>
    </Style.Triggers>
</Style>
...
<Button DataContext="relevant data context" Style="{StaticResource SpecialButtonStyle}"/>

或者,更好的是,您可以为具有IsSelected属性的特定数据类定义一个数据模板吗?此数据模板可以自动使用正确的Button样式。