2010-02-13 3 views
1

В приложении WPF, я правильно привязал DataTemplate к узлу XML, который выглядит как:Databinding к XML в DataTrigger в WPF

<answer answer="Tree", correct="false" score="10" /> 

В моем приложении, у меня есть TextBlock с ответом на него , Сначала я хочу, чтобы он был невидимым, но когда правильный атрибут в файле XML изменился на «true», он должен стать видимым.

My DataTemplate правильно подключен, потому что все остальное работает. Например, если я изменяю атрибут ответа в XML-файле (только для тестирования), он изменяется в моем представлении WPF. Но у меня проблемы с видимостью. Это моя XAML:

<TextBlock Text="{Binding [email protected]}" Visibility="Hidden"> 
    <TextBlock.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding [email protected]}" Value="true"> 
        <Setter Property="TextBlock.Visibility" Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

Я угадал Databinding в DataTrigger не работает правильно. Кто-нибудь знает?

ответ

2

Я столкнулся с той же проблемой, что и в ToggleButtons. Попробуйте удалить видимость = «False» и замените его другим DataTrigger, который обрабатывает неверный случай.

1

Я думаю, проблема заключается в том, что свойство Видимость жестко закодировано. Попробуйте установить видимость в стиле:

<TextBlock Text="{Binding [email protected]}"> 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="Visibility" Value="Hidden"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding [email protected]}" Value="true"> 
        <Setter Property="TextBlock.Visibility" Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
+0

Разве он не хотел бы это вместо триггера данных? Что делать, если ответ изменен и снова неверен? Не уверен, почему пользователь это сделает, но все равно что-то рассмотреть. – Dave

+0

@ Дэйв, ты хорошо говоришь. Мой ответ только в ответ на его конкретный вопрос и образец кода. – Tim

1

Уверенный, это работает, если вы дадите конкретный случай else вместо просто false. Как и в моем случае, это было {x: Null} и значение. Поэтому, когда присутствует его значение для привязки, оно будет истинным, а TextBlock.Visibilty будет установлено с использованием значения seters, и когда путь привязки не имеет значения внутри него, то есть null в моем случае, просто {x: Null} :)