1 回答
TA贡献1843条经验 获得超7个赞
在 CellTemplate 中,DataContext 是 DataGrid 行,无论它是什么(Candy在本例中)。因此,默认情况下,该Candy实例将是Source该 DataTemplate 中任何 Binding 的属性。绑定将在此处查找 Path 中指定的属性(在本例中IsConfirmed为 和IsConfirmedCommand)。
这就是您想要的:网格中有多于一行,而该行通常是您在单元格中关心的内容。该字段或字段:但单元格模板通常需要查看多个字段,因此它们会为您提供整行。
但在这种情况下,您想要返回并从父视图模型中获取一些内容。Viewmodel 没有自然的父/子层次结构,但如果您愿意,您可以给它们一个层次结构:Candy 可以拥有一个Parent引用拥有该Candies集合的 viewmodel 的属性。如果你这样做了,你可以像这样绑定:
Command="{Binding Parent.IsConfirmed}"
但这并不常见。我不知道这是否是一个特别好的主意。
我们不需要这样做的原因之一是我们可以告诉绑定使用不同的源。UI 元素确实具有自然的父/子层次结构,并且绑定可以对其进行导航。如果你做得正确,你的父视图模型将是某个地方的 DataContext。
{Binding Path=DataContext.IsConfirmed,
RelativeSource={RelativeSource AncestorType=DataGrid}}
“向上遍历 UI 树,直到找到 DataGrid。这就是您的源。现在,一旦有了源,就找到源对象的 DataContext 属性(如果有)。如果它有 DataContext,则获取 DataContext 的值并查看该对象对于一些名为 IsConfirmed 的属性。”
DataGrid 有一个 DataContext 属性。由于您的绑定有效Candies,我们知道 DataContext 必须是具有属性的类Candies。你向我保证班级IsConfirmed也有。
因此:
<DataTemplate>
<CheckBox
Style="{StaticResource CandyCheckBox}"
IsChecked="{Binding DataContext.IsConfirmed,
RelativeSource={RelativeSource AncestorType=DataGrid}}"
Margin="-75 0 0 0"
Command="{Binding DataContext.IsConfirmedCommand,
RelativeSource={RelativeSource AncestorType=DataGrid}}"
/>
</DataTemplate>
- 1 回答
- 0 关注
- 75 浏览
添加回答
举报