2

リストをDataGridにバインドする際に問題が発生しました。

私が欲しいのは、次のようなさまざまなタイプを示す列を作成することです。

[プロパティ1][文字列]

[プロパティ2][bool]

[プロパティ3][列挙型]

私の実装は次のようになります。

public interface IPropertyItem 
{
}

public class PropertyItem<T> : IPropertyItem
{
    public String Name { get; set; }
    public T Value { get; set; }
}

これらのプロパティを保存するリストを作成します。

List<IPropertyItem> PropertyList { get; set; }

そして、データグリッドにバインドします。

dataGrid.ItemsSource = PropertyList;

ここでの問題は、2番目の列のすべてのセルが異なるデータ型をテキストとして表示することです。

しかし、私が欲しいのは、boolsのチェックボックス、enumのコンボボックスなどを用意することです。

私はこれで本当に助けていただければ幸いです。この問題で何日も立ち往生しています。

ありがとうございました!

- アップデート -

DataTemplateSelectorを追加すると、問題が解決しました。

4

3 に答える 3

1

セルテンプレートを定義できるDataGridTemplateColumnを使用できます。そのCellTemplateSelectorプロパティは、複数のテンプレートを定義し、たとえばコンテンツのタイプに基づいて1つを使用するのに役立ちます。そのためにカスタムDataTemplateSelectorを作成する必要がありますが、それは非常に簡単です。

于 2013-02-20T10:17:51.847 に答える
1

したがって、 DataTemplateSelectorを探しています。

例:

<local:DynamicTemplateSelector x:Key="MyTemplateSelector" />

<DataTemplate x:Key="StringTemplate">
   <TextBlock>
    <Run Text="String: " />
    <Run Text="{Binding}" />
</TextBlock>

<DataTemplate x:Key="Int32Template">
<TextBlock>
    <Run Text="Int32: " />
    <Run Text="{Binding}" />
</TextBlock>

<Style x:Key="MyListStyle" TargetType="ListView">
<Setter Property="ItemTemplateSelector" Value="{StaticResource MyTemplateSelector}"/>
<Setter Property="local:DynamicTemplateSelector.Templates">
    <Setter.Value>
        <local:Templates>
            <local:Template Value={x:Type String} DataTemplate={StaticResource StringTemplate}/>
            <local:Template Value={x:Type Int32} DataTemplate={StaticResource Int32Template}/>
        </local:Templates>
    </Setter.Value>
</Setter>

于 2013-02-20T10:20:58.587 に答える
1

次の手順で実行できます。

1)コレクション内のタイプごとにDataTemplateを定義する必要があります。
2)タイプに基づいてDataTriggerでテンプレートを割り当てるか、DataTemplateSelectorを使用できます

それが役に立てば幸い。

于 2013-02-20T10:21:05.347 に答える