让我用伪代码问这个问题:
<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
答案 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?