1

列表被綁定到DataGrid在Silverligh 4的屬性:數據網格:DataGridTemplateColumn的內部結合到列表

<data:DataGrid 
     x:Name="dataGrid"  
     ItemsSource="{Binding DetailsCollection}" 
     IsReadOnly="True"> 
    <data:DataGrid.Columns>      
     <data:DataGridTemplateColumn> 
      <data:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding IsDirty, Converter={StaticResource IsDirtyConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
       </DataTemplate> 
      </data:DataGridTemplateColumn.CellTemplate> 
     </data:DataGridTemplateColumn> 
    </data:DataGrid.Columns> 
</data:DataGrid> 

綁定到DataGridTemplateColumn TextBlock中的IsDirty屬性是DetailsCollection的屬性。 DataGridTemplateColumn中的綁定正在查看列表中特定項目的屬性。我怎樣才能改變這種行爲來獲得名單的財產?

回答

1

你不能這樣做「開箱」。原因是DataGridCell的DataContext被設置爲它綁定的項目。有幾種不同的方法可以做到這一點。最簡單的方法可能就是修改你的數據項目以返回到列表。如果你需要做很多事情,你可能需要編寫一個工具來幫助你。

您可以創建一個名爲類似AncestorDataContext的附加屬性,該屬性遍歷顯示樹(請參閱VisualTreeHelper)並按名稱搜索目標元素。當它找到它時,它將它的FrameworkElement的DataContext設置爲找到的控件,即DataGrid。我一直在使用這種方法來彌補SL中缺少RelativeSource FindAncestor。

<DataTemplate><Border custom:AncestorDataContext="dataGrid"> 
    <TextBlock Text="{Binding ItemsSource.IsDirty, Converter={StaticResource IsDirtyConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center" /> 

相關問題