2014-08-27 3 views
0

Мне нужно сделать компонент, где флажки меняются на радиообъекты, когда изменяется определенное свойство. Я не знаю, как это сделать в xaml. Флажок находится в таблице данных, как показано ниже. Теперь мне нужна какая-то логика, чтобы превратить ее в радиообъект.Как я могу динамически изменять элемент управления WPF в другой?

<DataTemplate> 
    <CheckBox IsChecked="{Binding IsSelected.Value, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Center"/> 
</DataTemplate> 
+7

Добавьте еще один «RadioButton», измените «Видимость» двух элементов управления в соответствии с вашей логикой. – Bolu

+0

Проблема заключается в том, что в DataTemplate может быть только один элемент управления. – ggrd4rk

+0

Закройте их «Grid» или «StackPanel» и т. Д. – Bolu

ответ

0

вы можете поставить как CheckBox и RadioButton в одном контейнере (StackPanel, например) в DataTemplate и просто разрушится один из них в соответствии с вашим состоянием с помощью DataTrigger.

Надеюсь, это вам поможет. извините за мой чистый английский.

<DataTemplate> 
    <StackPanel> 
     <CheckBox Content="CheckBoxHeader"> 
      <CheckBox.Style> 
       <Style TargetType="CheckBox"> 
        <Setter Property="Visibility" Value="Visible"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Condition}" Value="True"> 
          <Setter Property="Visibility" Value="Collapsed"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </CheckBox.Style> 
     </CheckBox> 
     <RadioButton Content="RadioButtonHeader"> 
      <RadioButton.Style> 
       <Style TargetType="RadioButton"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Condition}" Value="True"> 
          <Setter Property="Visibility" Value="Visible"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </RadioButton.Style> 
     </RadioButton>       
    </StackPanel> 
</DataTemplate> 
+0

Пожалуйста, объясните свой ответ, не размещайте только какой-либо код. – Hari

2

Особенно когда есть много случаев, решение иметь оба управления в пределах DataTemplate и изменение видимости, не может быть идеальным с учетом производительности и использования памяти. В этом случае DataTemplateSelector может сделать трюк - см. this tutorial

+0

Свертывание не страшно и позволяет вам анимировать переход. Элемент удаляется из процесса измерения и компоновки, а структура свойств зависимостей WPF предназначена для минимизации использования памяти на больших графиках сцены. – Gusdor

+1

Вы правы, это определенно не так, и я использую коллапсирующий подход в нескольких моих приложениях (с небольшим количеством элементов). Я просто хотел показать, что есть альтернативный путь. – andreask

Смежные вопросы