繁体   English   中英

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

[英]How to bind the Command property of the ItemTemplate CheckBox to ViewModel object's property?

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

<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。

“联系人”具有“ PersonCollection”(公共ICommand PersonSelectedCommand属性)。 “ PersonCollection”是列表

“人”具有“姓名”,“年龄”属性

当前,此功能不起作用,因为CheckBox试图查找并绑定对象“ person”的ICommand“ PersonSelectedCommand”属性,该属性不存在!

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

谢谢并恭祝安康
第123章

我喜欢SeeSharp的回答,但要直接回答您的问题,只需将CheckBox的Command绑定更改为:

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

仅当您需要更多控制权而不是简单地绑定IsSelected属性会给您带来更多控制权时,这才比SeeSharp的答案更好。 否则,请绑定IsSelected。

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

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

命令不会重新排序,您可以在属性IsSelected的设置器中添加一些功能。

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

否则,您可以在Binding中使用RelativeSource找出祖先,并以这种方式设置PersonSelectedCommand。 检查以下答案: 是否存在一种简单的方法来指定WPF数据绑定,而路径是向上的“一级”?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM