DataTemplate检查Binding是否存在

时间:2012-03-01 10:28:28

标签: c# wpf xaml data-binding datatemplate

我在ResourceDictionary中创建了一个Button Style作为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的绑定。这种属性在那里有一种情况,在另一种情况下没有。

是否可以在Xaml中检查绑定路径是否存在,然后在其他情况下使用它会忘记它吗? 现在我在Debug输出中有BindingExpression,我想消除它。

1 个答案:

答案 0 :(得分:1)

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

您确定不能使用更合适的机制吗?例如,您是否可以使用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样式。