2009-06-18 1 views
1

У меня есть пользовательское окно, которое имеет два свойства: Boolean? ValidationStatus и строка ValidationMessage. Привязка этих свойств работает нормально, но триггер не срабатывает, когда эти значения изменяются. Что я делаю не так?Не удается обновить свойство текстового поля, используя DataBinding

<TextBlock x:Name="validationTextBox" 
    Grid.Row="1" 
    Grid.ColumnSpan="2" 
    Text="{Binding ElementName=_this, Path=ValidationMessage}" 
    TextAlignment="Center" 
    Background="Green"> 

    <TextBlock.Style> 
     <Style> 
     <Style.Triggers> 
      <DataTrigger Value="False" Binding="{Binding ElementName=_this, Path=ValidationStatus}"> 
      <Setter Property="Panel.Background" Value="Red"/> 
      <Setter Property="TextBox.Text" Value="Outer checkbox is not checked"/> 
      </DataTrigger> 
     </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 

</TextBlock> 

ответ

1

Стиль Setters не переопределяет локальные настройки атрибутов. Поэтому значения триггера данных игнорируются, поскольку вы указали свойства Text и Background в TextBlock. Для решения этой проблемы установите значения по умолчанию этих свойств в стиле, как показано в следующем коде:

<TextBlock x:Name="validationTextBox" 
      Grid.Row="1" 
      Grid.ColumnSpan="2" 
      TextAlignment="Center"> 

<TextBlock.Style> 
    <Style> 
    <Setter Property="TextBox.Text" Value="{Binding ElementName=_this, Path=ValidationMessage}"/> 
    <Setter Property="TextBox.Background" Value="Green"/> 
    <Style.Triggers> 
     <DataTrigger Value="False" Binding="{Binding ElementName=_this, Path=ValidationStatus}"> 
     <Setter Property="TextBox.Background" Value="Red"/> 
     <Setter Property="TextBox.Text" Value="Outer checkbox is not checked"/> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</TextBlock.Style> 

+0

Спасибо, вы право на точку, хотя я нашел одну вещь в вас пример не работает , фон не обновлялся. Чтобы он работал, мне пришлось сменить «Panel.Background» на «TextBlock.Background». –