使用不同的控件在 Wpf Datagrid 的列中编辑不同类型的对象

3
我需要从一个包含数个字典的ObservableCollection创建Wpf Datagrid绑定,其中字符串是属性名称,对象是属性值。每个对象都可以是不同的类型,可以是布尔值(复选框),字符串(文本框),CustomClassObject(下拉框或文本框),整数(文本框)或枚举(ComboBox,枚举中的每个值)。
并且它需要动态填充。
我尝试了解这个问题已经一个星期了,但它很难。
你有什么想法如何创建这样的datagrid来解决这个问题吗?如何将从字典中提取的对象列表或整个字典绑定到datagrid,以便用户轻松地编辑它?
如果可能的话,我应该使用带有一些转换器的数据模板,它将为每个对象返回正确的控件及其相应的值。或者我应该创建一个用户控件,它将由可绑定属性对象组成,我将通过每个值分配正确的控件来填满该字段,并且它将被绑定到ContentControl?
谢谢您的每个提示。

1
如果您按照您所说的那样使用字典,您只能有1行数据...?除非您建议使用一组字典! - Glen Thomas
是的,你说得对,我有一系列的字典。谢谢 Glen。 - user2988017
这是必要的吗?您不知道在编译时会有哪些列吗? - Glen Thomas
两列:属性名称和属性值。从这些字典的集合填充。 - user2988017
1个回答

1
也许是这样的:

可能是这样的:

public class MyObjectList : ObservableCollection<object>
{
    public MyObjectList()
    {
        Add(new KeyValuePair<string, int>("Key1", 1));
        Add(new KeyValuePair<string, string>("Key2", "Value2"));
        Add(new KeyValuePair<string, bool>("Key3", true));
        Add(new KeyValuePair<string, double>("Key4", 1.5));
        Add(new KeyValuePair<string, MyEnum>("Key5", MyEnum.OPTION3));
        Add(new KeyValuePair<string, MyCustomClass>("Key6", new MyCustomClass(123)));
    }
}

public class MyCustomClass
{
    int value;

    public MyCustomClass(int value)
    {
        this.value = value;
    }
    public override string ToString()
    {
        return string.Format("MyCustomClass is {0}", value);
    }
}

enum MyEnum { OPTION1, OPTION2, OPTION3 };

XAML:
    <DataGrid Margin="0" ItemsSource="{Binding Mode=OneWay}">
        <DataGrid.DataContext>
            <local:MyObjectList/>
        </DataGrid.DataContext>
    </DataGrid>

结果:

enter image description here


感谢jstreet的回答,但在这种方法中,我认为我想要能够编辑这些值。我只能在屏幕上显示它们。 - user2988017
你可以编辑所有内置类型,如字符串、整型、布尔型、双精度浮点型,可能还包括枚举(没有尝试过)。对于任何自定义类,例如MyCustomClass,你可以使用PropertyGrid。 - jsanalytics

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接