每个单元格中具有不同 UserControl 的 WPF DataGrid

Rei*_*ini 2 c# wpf datagrid celltemplate datatemplateselector

我有一个如下所示的数据模型:

public class Model
{
    public string DisplayAs {get;set;} // TextBox, CheckBox, ComboBox
    public string Value {get;set;}
    public string DisplayName {get;set;} // Row1, Row2, ...
}
Run Code Online (Sandbox Code Playgroud)

现在我想在 Datagrid 中显示这些模型,如下所示: 每个单元格中有一个其他控件的 Datagrid

我怎么能做到这一点?请提供一些示例代码。我用不同类型的 DataTemplateSelectors 尝试了一整天,但我无法让它工作

Lee*_*ere 6

您的选择器根据它们的DisplayAs值为第二列中的单元格选择模板。您必须将模板添加到您的DataGrid.Resources. 然后在第二列中,您分配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/>
Run Code Online (Sandbox Code Playgroud)