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

标签 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 中显示这些模型,如下所示: Datagrid with a other control in each cell

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

最佳答案

您的选择器根据它们的 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/>

关于c# - 每个单元格中具有不同 UserControl 的 WPF DataGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154839/

相关文章:

c# - 在 WPF 数据网格中查找行的高度

c# - 如何从同一中继器项目中的下拉列表中选择的更改事件中获取中继器项目中控件的值?

.net - WPF:直接绑定(bind)到控件

c# - WPF 和 Paypal 集成

c# - 如何使用 StringFormat 的动态值

silverlight - 如何将分组标题从属性名称更改为更具描述性的名称

c# - 如何使用javascript实现隐藏和显示单选按钮

c# - 似乎无法解析 KeyedByTypeCollection?

c# - 欺骗应用程序关于鼠标位置的信息

.net - 在数据网格中使用组时列折叠