如何将ItemTemplate CheckBox的Command属性绑定到ViewModel对象的属性?

时间:2010-06-17 04:27:53

标签: wpf binding itemtemplate icommand

让我用伪代码问这个问题:

<Window> <ListView ItemsSource="{Binding PersonCollection}"> <ListView.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Path=Name}" /> <TextBlock Text="{Binding Path=Age}" /> <TextBlock Text="/" /> <CheckBox Command="{Binding PersonSelectedCommand}" /> <!-- Where "PersonSelectedCommand" is a public command property available in ViewModel object (lets say "Contacts" in this context)--> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> </Window>

凡     “联系”ViewModel对象设置为窗口的DataContext。

    “Contacts”具有“PersonCollection”,公共ICommand PersonSelectedCommand属性。     “PersonCollection”是列表

    “人”有姓名,年龄属性

目前这不起作用,因为CheckBox试图找到并绑定对象“person”的ICommand“PersonSelectedCommand”属性,该属性不存在!

如何将CheckBox绑定到对象“Contact”的ICommand“PersonSelectedCommand”属性

谢谢和问候 123Deveopler

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:1)

您可以更改视图模型吗? 如果你将Bool属性IsSelected添加到Person,我认为会更好。并将其绑定到复选框:

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

不需要命令,您可以在属性IsSelected的设置器中添加一些功能。

答案 2 :(得分:0)

PersonSelectedCommand必须在Person范围内。因此,当您绑定到人员列表时,您将拥有一个命令列表。因此,无论何时选择一个人,您都将拥有相应的命令来执行。

否则你可以在Binding中使用RelativeSource找出祖先并以这种方式设置PersonSelectedCommand。请检查此答案:Is there a simple way to specify a WPF databinding where the path is one "level" up?