1

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

<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”是列表

“Person”具有名称、年龄属性

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

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

感谢和问候
123Deveopler

4

3 回答 3

6

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

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

仅当您需要更多控制而不是简单地绑定 IsSelected 属性时,这比 SeeSharp 的答案更可取。否则使用绑定 IsSelected。

于 2010-06-17T06:34:04.257 回答
1

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

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

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

于 2010-06-17T06:00:11.347 回答
0

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

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

于 2010-06-17T06:00:35.073 回答