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 的屬性?!?/p>
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 關注
- 100 瀏覽
添加回答
舉報