DataTemplate проверяет, существует ли привязка - PullRequest
1 голос
/ 01 марта 2012

Я сделал Стиль кнопки как DataTemplate в ResourceDictionary. Здесь небольшая часть:

    <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>

В этом шаблоне есть привязка к объекту недвижимости. Это свойство в одной ситуации есть, а в другой нет.

Можно ли проверить в Xaml, существует ли путь привязки, а затем использовать его, если забыть? Теперь у меня было BindingExpression в выходных данных отладки, и я хочу устранить это.

1 Ответ

1 голос
/ 01 марта 2012

Более уместный вопрос: почему у вас 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.

...