サーバーから取得した動的データ(カスタムDataRowsのコレクション)を含むDataGridがあります。DataRowには、インデクサーと、バインディングのデータ行全体を返すプロパティDataがあります(以下を参照)。
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全体があり(列が行の1つの項目にバインドされているため、理由がわかりません)、コンバーターは呼び出されません。データ行全体がデフォルトのDataContextであるため、この場合、コードビハインドバインディングは単に無視されていると思います。
そこで、テンプレートセレクターをDataGridCellのControlTemplateに配置しようとしました。
<Style TargetType="sdk:DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridCell">
<view:DataGridCellTemplateSelector Content="{TemplateBinding Content}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
しかし、この場合、セレクターのコンテンツとして空のテキストを含むTextBlockがあります(SHOCKED)。コンテンツが変更された後、コンバーターが呼び出されます。バインディングのデータに従ってテンプレートを選択するテンプレートセレクターを作成するにはどうすればよいですか(コンバーターが呼び出された後)?