[英]How to bind an object's boolean property to a CheckBox's IsChecked property?
[英]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.