WPF グリッドにバインドしたいコレクションがあります。
私が直面している問題は、列の数が動的であり、コレクションに依存していることです。以下は簡単なモックアップです。
public interface IRows
{
string Message{get;}
IColumns[] Columns{get;}
}
public interface IColumns
{
string Header {get;}
AcknowledgementState AcknowledgementState{get;}
}
public interface IViewModel
{
ObservableCollection<IRows> Rows {get;}
}
ビューを、列のコレクションを含む行コレクションにバインドしたいと考えています。
私の列コレクションには、画像 (3 つの可能性のうちの 1 つ) で表す必要がある列挙型が含まれています。また、1 つの列にのみ表示される Message プロパティも含まれます (静的で、テキスト情報のみ)。また、その列のヘッダーとして表示されるヘッダー文字列も含まれています。
列の数は可変であることに注意してください (現時点ではヘッダーは Acknowledge に設定されていますが、これは動的データを表すように変更されます)。
更新: これは、レイチェルからの提案を実装した後です
<ItemsControl
ItemsSource="{Binding Items, Converter={StaticResource PresentationConverter}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid ShowGridLines="true"
local:GridHelpers.RowCount="{Binding RowCount}"
local:GridHelpers.ColumnCount="{Binding ColumnCount}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row" Value="{Binding RowIndex}"/>
<Setter Property="Grid.Column" Value="{Binding ColumnIndex}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type UI:MessageEntity}">
<TextBox Text="{Binding Message}"></TextBox>
</DataTemplate>
<DataTemplate DataType="{x:Type UI:StateEntity}">
<TextBox Text="{Binding State}"></TextBox>
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
これは、私が今欲しいものをほとんど与えてくれます。私はヘッダーのために何をすべきかだけにこだわっています。どんな提案でも大歓迎です。