2016-03-18 2 views
0

Я хочу управлять кнопками IsEnabled на основе следующих условий. Кнопка должна быть активной только тогда, когда:Управление включенным состоянием кнопки с использованием 3 мультиинтервалов данных

  1. Флажок 1 или флажок 2 отмечен.
  2. Список содержит по крайней мере 1 элемент списка.

Моя проблема: я должен использовать отдельный MultiDataTrigger для достижения такого поведения. Когда я добавляю код в первый триггер мультидат, он не работает. т.е. даже если в списке нет элементов, кнопка активируется.

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

Заранее спасибо. Пожалуйста, проверьте мой код ниже.

<Button.Style> 
       <Style TargetType="Button"> 
        <Style.Triggers> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding ElementName=Checkbox1, Path=IsChecked}" Value="False" /> 
           <Condition Binding="{Binding ElementName=Checkbox2, Path=IsChecked}" Value="False" /> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="IsEnabled" Value="False" /> 
         </MultiDataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding ElementName=ListBox, Path=Items.Count}" Value="0" /> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="IsEnabled" Value="False" /> 
         </MultiDataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Button.Style> 

ответ

1

MultiTrigger применяет связанные с сеттеры или действия, когда все условия являются истинными (двоичная операция И).

Как уже упоминалось, триггер срабатывает при всех условиях AND'd, поэтому он не срабатывает, когда вы объединяете все условия. Самый простой способ создания OR (без реализации IMultiValueConverter) состоит в том, чтобы иметь несколько datatriggers (что подразумевает двоичную операцию OR).

Если вы намерены сохранить строки кода, вы можете использовать DataTrigger вместо MultiDataTrigger.

<DataTrigger Binding="{Binding ElementName=listView, Path=Items.Count }" Value="0"> 
      <Setter Property="IsEnabled" Value="False" /> 
    </DataTrigger> 
+0

Извините за поздний ответ. благодаря – ViVi

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