2

私は次のようなデータモデルを持っています:

public class Model
{
    public string DisplayAs {get;set;} // TextBox, CheckBox, ComboBox
    public string Value {get;set;}
    public string DisplayName {get;set;} // Row1, Row2, ...
}

ここで、これらのモデルを次のように Datagrid に表示したいと思います。 各セルに他のコントロールがあるデータグリッド

どうすればこれを達成できますか?いくつかのサンプルコードを提供してください。さまざまな種類の DataTemplateSelectors で一日中試しましたが、うまくいきません

4

1 に答える 1

7

セレクターは、DisplayAs値に基づいて 2 番目の列のセルのテンプレートを選択します。テンプレートを に追加する必要がありますDataGrid.Resources。次に、2 番目の列で、CellTemplateSelector

public class DynamicDataTemplateSelector: DataTemplateSelector
{
    public override DataTemplate
        SelectTemplate(object item, DependencyObject container)
    {
        FrameworkElement element = container as FrameworkElement;

        if (element != null && item != null && item is Task)
        {
            Model model = item as Model;

            return element.FindResource(model.DisplayAs + "Template");
        }

        return null;
    }
}

<DataGrid>
    <DataGrid.Resources>
        <DataTemplate x:Key="TextBoxTemplate">
            <TextBox Text="{Binding Value}"/>
        </DataTemplate>
        <DataTemplate x:Key="CheckBoxTemplate">
            <CheckBox IsChecked="{Binding Value}"/>
        </DataTemplate>
        <DataTemplate x:Key="ComboBoxTemplate">
            <ComboBox SelectedItem="{Binding Value}"/>
        </DataTemplate>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="RowName">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{DisplayName}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Data" 
             CellTemplateSelector="{StaticResource DynamicDataTemplateSelector}"/>
    <DataGrid.Columns>
<DataGrid/>
于 2013-08-09T21:09:53.903 に答える