【问题标题】:C# WPF Datagridview change dynamic property to type selected from combo boxC# WPF Datagridview 将动态属性更改为从组合框中选择的类型
【发布时间】:2020-04-05 15:50:08
【问题描述】:

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

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

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

这是我将数据网格的源绑定到的集合:

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

如何使 Value 属性成为 datagridview 中的指定类型?我正在考虑添加另一个名为“Type”的属性,并使其成为组合框列来指定类型(int、bool 等)

【问题讨论】:

    标签: c# wpf dynamic


    【解决方案1】:

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

    现在你有了我的 2 美分,下面是你如何实现你想要的。

    你说你应该在你的类中添加一个属性来处理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;
                 }
             }
    
    }
    

    示例用法

    TagIO tg = new TagIO();
    tg.MyType = typeof(int);
    tg.Value = 311;
    Console.WriteLine("{0} {1}", tg.MyType.Name, tg.Value); //Int32 311
    Console.ReadKey();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      相关资源
      最近更新 更多