как использовать IsChecked в качестве командного параметра в той же команде checkboxes

#wpf #mvvm

#wpf #mvvm

Вопрос:

Итак, у меня есть флажок, который запускает команду с использованием WPF / MVVM, это работает нормально, но я хочу использовать свойство IsChecked флажка в качестве командного параметра. Я попробовал это.

   <CheckBox Margin="3" Content="Clear Selected OEM" 
                              Command="{Binding Path=ClearOemCommand}" 
                              CommandParameter="{Binding Path=IsChecked}"/>
  

Но я получаю сообщение об ошибке в окне вывода, в котором говорится

 System.Windows.Data Error: 40 : BindingExpression path error: 'IsChecked' property not found on 'object'
  

Я бы знал, как использовать find ancestor, если бы хотел использовать свойство из другого элемента управления, но я в тупике — это, вероятно, проще, чем я думаю… Просто у меня не получается установить соединение.

Спасибо!

Комментарии:

1. CommandParameter=»{Путь привязки=IsChecked RelativeSource=Self}

2. вы должны указать этот ответ Arseny, чтобы его можно было повысить и упростить поиск

3. wpfwiki.com/WPF Q5.3.ashx

4. RelativeSource=Self — duh… Я знал это, я делаю это так редко, что забыл, СПАСИБО!

5. @Arseny: Вы должны опубликовать это в качестве ответа…

Ответ №1:

Пожалуйста, добавьте RelativeSource Self в CommandParameter

   <CheckBox Margin="3" Content="Clear Selected OEM" 
   Command="{Binding Path=ClearOemCommand}" 
   CommandParameter="{Binding Path=IsChecked, RelativeSource={RelativeSource Self}}" />
  

Комментарии:

1. Можно ли таким же образом установить непроверенное состояние флажка? Если я сделаю то же самое, компилятор скажет, что вы не можете установить CommandParameter более одного раза.

2. @Strum Я не могу найти свойство Unchecked в флажке. Даже если он существует, вы всегда можете установить IsChecked по своему усмотрению.

3. @Arseny привет, может ли это поддерживать TwoWay привязку? Я бы тоже хотел привязать IsChecked свойство, что-то вроде CommandParameter="{Binding Path=IsChecked, RelativeSource={RelativeSource Self},Mode= TwoWay}" . Или я должен привязать IsChecked отдельно? Я думаю, что CommandParameter могу обрабатывать IsChecked свойство (одним способом), я просто сомневаюсь, могу ли я использовать только свойство CommandParameter для реализации TwoWay привязки IsChecked ?

Ответ №2:

Если вы столкнетесь со следующим исключением, как это сделал я…

Свойство Set System.Windows.Data.Binding.RelativeSource выдало исключение

Попробуйте это вместо:

 CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}"
  

Ответ №3:

Да, JW1 верен. Вы также можете использовать elemen name подобным образом, это тоже сработало бы

 "{Binding Path=IsChecked,ElementName=chkAll}"
  

Ответ №4:

Вместо создания команды на флажке вы можете привязать IsChecked к свойству CLR и выполнить свою командную логику для установки свойства CLR. Это еще один обходной путь передачи поведения команды.