Как связать свойство Command элемента CheckTox ItemTemplate со свойством объекта ViewModel? - PullRequest
1 голос
/ 17 июня 2010

Позвольте мне задать этот вопрос с псевдокодом:




    
        
            
                
                    
                    
                    
                      <!-- Where "PersonSelectedCommand" is a public command property available in ViewModel object (lets say "Contacts"  in this context)-->
                
            
        
    

Где«Контакты» объект ViewModel, установленный как DataContext для окна.«Контакты» имеет «PersonCollection», открытые свойства ICommand PersonSelectedCommand."PersonCollection" является списком«Персона» имеет Имя, Возрастные свойства

В настоящее время это не работает, так как CheckBox пытается найти и привязать свойство ICommand "PersonSelectedCommand" объекта "person", которого не существует!

Как будет привязываться CheckBox к ICommandСвойство объекта «Контакт» «PersonSelectedCommand»

Благодарности123Deveopler

Ответы [ 3 ]

6 голосов
/ 17 июня 2010

Мне понравился ответ SeeSharp, но чтобы непосредственно ответить на ваш вопрос, все, что вам нужно сделать, это изменить привязку команды CheckBox на:

Command="{Binding DataContext.PersonSelectedCommand,
                  RelativeSource={RelativeSource FindAncestor,ListView,1}}"

Это предпочтительнее, чем ответ SeeSharp, только когда вам нужно больше контроля, чемпростое связывание свойства IsSelected даст вам.В противном случае перейдите с привязкой IsSelected.

1 голос
/ 17 июня 2010

Можете ли вы изменить вид модели? Я думаю, будет лучше, если вы добавите свойство bool IsSelected в Person. И привязать его к флажку:

<CheckBox IsChecked="{Binding IsSelected}"/>

Команда не требуется, и вы можете добавить некоторые функции в установщик свойства IsSelected.

0 голосов
/ 17 июня 2010

PersonSelectedCommand должно быть в области Персона. Таким образом, у вас будет список команд при привязке к списку людей. Следовательно, всякий раз, когда человек выбран, у вас будет соответствующая команда для выполнения.

В противном случае вы можете найти Предка, используя RelativeSource в Binding, и установить таким образом PersonSelectedCommand. Проверьте этот ответ: Есть ли простой способ указать привязку данных WPF, где путь на один уровень выше?

...