在WPF數據網格中,我有一列定義爲DataGridTemplateColumn,我需要在各種列上使用它。作爲一個非常簡單的例子,請考慮下面的虛擬樣品:如何重用WPF DataGridTemplateColumn(包括綁定)
<DataGrid ItemsSource="{Binding Path=ItemList, Mode=OneWay}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name" MinWidth="130" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DockPanel LastChildFill="True">
<Image Source="component/Images/test.png"/>
<TextBlock Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnDataErrors=True}"/>
</DockPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DockPanel LastChildFill="True">
<Image Source="component/Images/test.png"/>
<TextBox Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnDataErrors=True}"/>
</DockPanel>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Company" Binding="{Binding Company, ValidatesOnDataErrors=True}" MinWidth="115" Width="Auto"/>
</DataGrid.Columns>
</DataGrid>
舉個簡單的例子,我怎麼能申請用於與標題=名稱欄與標題=公司列相同的模板,而不必重現每一列的整個模板?
我發現this previous SO question一個答案,他們解釋使用的資源,如:
<Application.Resources>
<DataTemplate x:Key="CellTemplate">
...
</DataTemplate>
<DataTemplate x:Key="CellEdintingTemplate">
...
</DataTemplate>
</Application.Resources>
<DataGrid Style="{StaticResource MainGridStyle}">
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource MyFirstColumnCellTemplate}" CellEdintingTemplate="{StaticResource MyFirstColumnCellEdintingTemplate}"/>
...
</DataGrid.Columns>
<DataGrid>
這讓我95%在那裏,但我錯過了最後一塊是如何處理的數據綁定?如何在模板中創建某種類型的佔位符,然後在網格中進行實際綁定?
編輯 我一直在尋找,發現這聽起來像什麼,我想要做的可能實際上是不可能的目前問題Create Common DataGridTemplateColumn。所以如果有人試圖做到這一點,並看到這個問題,我不能保證這是不可能的,但從這個鏈接看來可能是。所以只需要複製每列的所有tempalte代碼。
請問它有可能ContentPresenter使用在附近某處資源中定義的DataTemplate? – 2014-12-15 13:36:29