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

时间:2019-12-12 09:30:44

标签: c# wpf dynamic

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

数据网格绑定到包含Value属性的以下类的ObservableCollection:

public class TagIO
{
    public string Name { get; set; }
    public dynamic Value { get; set; }
}

这是我将datagrid的源绑定到的集合:

ObservableCollection<TagIO> InputCollection = new ObservableCollection<TagIO>();

如何从Datagridview中将Value属性设置为指定的类型?我在考虑添加另一个名为“类型”的属性,并使其成为组合框列以指定类型(int,bool等)。

1 个答案:

答案 0 :(得分:0)

在C#中使用动态属性可能会导致问题,并且通常被认为是不好的做法,除非您遇到某些需要的情况(例如COM互操作)。无论如何,我都会亲自将值存储为字符串,然后在需要时尝试对它进行ID| StringVal | value -------------------------------- 1 | text|another|other | text 1 | text|another|other | another 1 | text|another|other | other

现在您有了我的2美分,这就是您可以实现所需目标的方法。

您说应该在类中添加一个属性来处理TryParse()是正确的。通过添加该属性,您可以利用Type返回动态信息。

示例:

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;
             }
         }

}