Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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 Datagridview将动态属性更改为从组合框中选择的类型_C#_Wpf_Dynamic - Fatal编程技术网

C#WPF Datagridview将动态属性更改为从组合框中选择的类型

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

我希望能够通过从组合框中选择“int”、“bool”或“string”来设置datagrid中每个条目的动态属性“Value”的类型

datagrid绑定到包含Value属性的以下类的ObservableCollection:

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();