Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF DataGrid在每个单元格中具有不同的UserControl_C#_Wpf_Datagrid_Datatemplateselector_Celltemplate - Fatal编程技术网

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

C# WPF DataGrid在每个单元格中具有不同的UserControl,c#,wpf,datagrid,datatemplateselector,celltemplate,C#,Wpf,Datagrid,Datatemplateselector,Celltemplate,我有一个如下所示的数据模型: public class Model { public string DisplayAs {get;set;} // TextBox, CheckBox, ComboBox public string Value {get;set;} public string DisplayName {get;set;} // Row1, Row2, ... } 现在,我想在Datagrid中显示这些模型,其外观如下: 我怎样才能做到这一点?请提供一些

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

public class Model
{
    public string DisplayAs {get;set;} // TextBox, CheckBox, ComboBox
    public string Value {get;set;}
    public string DisplayName {get;set;} // Row1, Row2, ...
}
现在,我想在Datagrid中显示这些模型,其外观如下:

我怎样才能做到这一点?请提供一些示例代码。
我一整天都在尝试使用不同类型的DataTemplateSelector,但我就是无法让它工作

您的选择器根据第二列单元格的显示值为其选择一个模板。您必须将模板添加到您的
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/>
公共类DynamicDataTemplateSelector:DataTemplateSelector
{
公共覆盖数据模板
选择模板(对象项、从属对象容器)
{
FrameworkElement=容器作为FrameworkElement;
如果(元素!=null&&item!=null&&item为任务)
{
模型=项目作为模型;
返回元素.FindResource(model.DisplayAs+“模板”);
}
返回null;
}
}

请详细说明以下问题,例如绑定到Combobox、TextBox和CheckBox的内容?模型的值属性。对于正确的数据类型,将有一个IValueConverter谢谢Lee!这就是我一直在寻找的。睡了一夜之后,事情就不那么复杂了。由于我希望我的模型能够表示这些“控制列”,我在DatagridTemplateColumn中使用了ContentPresenter,并对其应用了TemplateSelector。因此,我可以将某个属性绑定到ContentPresenter