#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, чтобы его можно было повысить и упростить поиск
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. Это еще один обходной путь передачи поведения команды.