2013-07-18 4 views
4

Я новичок в WPF, и я пытаюсь создать логику xaml для отображения/скрыть элемент управления на основе значения AllowMiscTitle в ViewModel. Xaml состоит из двух полей, выпадающих из стандартных фрагментов («Mr», «Mrs», ..., «Other»), когда выбрано «Other». Я хочу, чтобы текстовое поле отображалось.WPF Отображение/скрытие элемента управления с триггерами

Я создал последующие XAML:

   <DockPanel Validation.Error="Validation_Error" HorizontalAlignment="Stretch"> 
       <ComboBox ItemsSource="{Binding Path=Titles, Mode=OneTime}" 
         Text="{Binding Path=Title}"/> 
       <TextBox x:Name="TxtBxTitle" Margin="5,5" Visibility="Visible"> 
        <TextBox.Style> 
         <Style> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding Path=AllowMiscTitle}" Value="false"> 
            <Setter Property="TextBox.Visibility" Value="Hidden"/> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </TextBox.Style> 
       </TextBox> 

      </DockPanel> 
+0

какого свойства выбранное значение COMBOBOX будет привязываться .. ?? – Vishal

ответ

5

Это Trigger не будет работать, потому что вы установили Visibility свойство явно TextBox

Делают это так:

<TextBox x:Name="TxtBxTitle" Margin="5,5"> 
    <TextBox.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=AllowMiscTitle}" Value="false"> 
         <Setter Property="TextBox.Visibility" Value="Hidden"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

Причиной этого является Dependency property value precedence.

3

Существует

<BooleanToVisibilityConverter x:Key="BoolToVis"></BooleanToVisibilityConverter> 

Вы можете использовать его следующим образом

<TextBox Visibility="{Binding YourPropertyName, Converter={StaticResource BoolToVis}}"></TextBox> 
0

Если я получил свой вопрос прямо: -

Если выбранное значение переплетены в какой-то собственности в ViewModel like: -

private string _GenderType; 

     public string GenderType 
     { 
      get 
      { 
       return _GenderType; 
      } 
      set 
      { 
       _GenderType= value; 
RaisePropertyChanged("GenderType"); 

В XAML: -

<TextBox.Style> 
     <Style> 
<Setter Property="TextBox.Visibility" value="Hidden"/> 
<Style TargetType="{x:Type TextBox}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=GenderType,ElementName=Combo1}" Value="Other"> 
         <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
Смежные вопросы