我有一個DataGrid與動態數據(自定義DataRows的集合),我從服務器獲得。 DataRow中有一個索引和屬性數據返回整個數據行的綁定(你會看到如下圖)DataGridCell內容模板選擇器Silverlight
我以這樣的方式創建一個DataGrid中的每一列:
DataGridTextColumn column = new DataGridTextColumn();
Binding binding = new Binding("Data[" + i.ToString() + "]");
binding.Mode = BindingMode.TwoWay;
binding.Converter = _dataContextSelector;
binding.ConverterParameter = dataColumn;
column.Binding = binding;
我需要什麼要做:我需要根據不同的方式顯示DataGridCells的內容,根據轉換器返回的數據。
我寫的模板選擇器(它繼承ContentControl中),並把它放在DataGridCell的財產的ContentTemplate以這樣的方式:
<Style TargetType="sdk:DataGridCell">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<view:DataGridCellTemplateSelector Content="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
在這種情況下,我把整個的DataRow爲我選擇的內容(不能不知爲什麼,因爲列被綁定在行的一個項目上),我的轉換器不被調用。整個datarow是默認的DataContext,所以我猜想,在這種情況下,我的代碼隱藏綁定是無視的。
所以我想我的模板選擇付諸DataGridCell的控件模板:
<Style TargetType="sdk:DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridCell">
<view:DataGridCellTemplateSelector Content="{TemplateBinding Content}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但在這種情況下,我有TextBlock的空句話作爲我的選擇(震驚)的內容。轉換器在內容改變後被調用。 如何創建模板選擇器,它將根據我的綁定數據(在調用轉換器後)選擇模板?