C#WPF Datagridview将动态属性更改为从组合框中选择的类型
我希望能够通过从组合框中选择“int”、“bool”或“string”来设置datagrid中每个条目的动态属性“Value”的类型 datagrid绑定到包含Value属性的以下类的ObservableCollection:C#WPF Datagridview将动态属性更改为从组合框中选择的类型,c#,wpf,dynamic,C#,Wpf,Dynamic,我希望能够通过从组合框中选择“int”、“bool”或“string”来设置datagrid中每个条目的动态属性“Value”的类型 datagrid绑定到包含Value属性的以下类的ObservableCollection: public class TagIO { public string Name { get; set; } public dynamic Value { get; set; } } 这是我将datagrid的源绑定到的集合: ObservableColl
public class TagIO
{
public string Name { get; set; }
public dynamic Value { get; set; }
}
这是我将datagrid的源绑定到的集合:
ObservableCollection<TagIO> InputCollection = new ObservableCollection<TagIO>();
ObservableCollection InputCollection=新的ObservableCollection();
如何从datagridview将Value属性设置为指定类型?我正在考虑添加另一个名为“Type”的属性,并将其作为一个组合框列来指定类型(int、bool等)。在C#中使用动态属性可能会导致问题,通常被认为是不好的做法,除非您在某些情况下需要它(例如COM互操作)。我个人会将该值存储为字符串,然后在需要时尝试
TryParse()
现在你有了我的2美分,下面是你如何实现你想要的
您说应该向类中添加一个属性来处理类型
是正确的。通过添加该属性,您可以利用Convert.ChangeType
返回动态数据
例如:
public class TagIO
{
//Create a private field to store your dynamic's value
private dynamic val;
//Create a property to store Type
public Type MyType{get;set;}
public string Name{get;set;}
public dynamic Value
{
get
{
//Return dynamic value as specified type
return Convert.ChangeType(val, MyType);
}
set
{
//set dynamic value.
val = value;
}
}
}
示例用法
TagIO tg = new TagIO();
tg.MyType = typeof(int);
tg.Value = 311;
Console.WriteLine("{0} {1}", tg.MyType.Name, tg.Value); //Int32 311
Console.ReadKey();