2012-03-16 57 views
0

很多時候,我有這樣的情況:數據綁定的RelativeSource替代

DataGrid中有自己的DataContext並在其中我需要訪問從CURRENTITEM和DataGrid中的DataContext屬性DataGridTemplateColumns。所以我最終寫了大量的{Binding DataContext.Something, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}}

有沒有更美麗或至少更少的代碼解決方案?

+0

可能在您的XAML中存在一個讓您集中「RelativeSource = {RelativeSource AncestorType = {x:Type DataGrid},Mode = FindAncestor}」的地方,因此您只寫「DataContext.Something」或甚至只是「Something 「在其餘的綁定? – NestorArturo 2012-03-16 19:49:28

+0

我想找到那個地方。 :) – 2012-03-17 06:18:12

回答

0

DataGrid是一個ItemsControl,每個項目都顯示其DataContext設置爲它顯示的項目。很顯然,你可以在DataGridXXXColumn中有一個很好的簡單綁定,例如

<DataGridTextColumn Binding="{Binding Name}" Header="Name" /> 

但是,當您指出要訪問DataGrid的DataContext時,您需要使用相對源綁定。這可能看起來像許多Xaml,但我會建議這是你應該做的。

我能想到讓XAML中簡單的唯一途徑是擁有集合中的每個項目有一個參考回父視圖模型,這樣你就可以直接綁定這樣的:

<DataGridTextColumn Binding="{Binding Parent.SomeProperty}" Header="???" /> 

這是一個解決方案,但可能不是一個明智的。

相關問題