【问题标题】:How to iterate through Observable collection?如何遍历 Observable 集合?
【发布时间】:2014-07-21 02:27:33
【问题描述】:

大家好,我想问一下我有一个具有以下属性的类:

public class VLANSPropertyClass
  {
    public string vname { get; set; }

    public int S_No { get; set; }

    public string vid { get; set; }

    public string ip { get; set; }

    public string vports { get; set; }
  }

我创建了一个ObservableCollection,如下:

  public ObservableCollection<VLANSPropertyClass> vlan { get; set; }
  vlan = new ObservableCollection<VLANSPropertyClass>();

我在数据网格中添加所有这些值:

        void AddVlans()
        {
          var serial = new VLANSPropertyClass();
          serial.S_No = vlan.Count + 1;
          Console.WriteLine(serial.S_No);
          serial.vname = VlanName;
          Console.WriteLine(serial.vname);
          serial.vid = VlanID;
          Console.WriteLine(serial.vid);
          serial.ip = VlanIP1 + "." + VlanIP2 + "." + VlanIP3 + "." + VlanIP4;
          Console.WriteLine(serial.ip);
          serial.vports = SelectedVlanPort;
          vlan.Add(serial);
        }

显示如下图:

现在我想遍历每一行并读取它的值。我尝试了以下但没有工作

foreach(VLANSPropertyClass v in vlan)
   {
     Console.WriteLine(v);
     Console.WriteLine();
    }

请告诉我从 ObservableCollection/Datagrid 读取值的可能方式。任何帮助都将非常感激。

【问题讨论】:

  • 我无法从数据网格中逐行提取值。每一行都应该像一个单独的对象一样读取。
  • 你有绑定到可观察集合的数据网格吗?
  • 是的 ..datagrid 工作正常我只想从 datagrid 中获取每一行值并将其写入控制台!
  • 行中的数据与集合中的数据相同。所以foreach中的每个v都是datagrid中行的数据。
  • 像这样打印实际属性 - Console.WriteLine(v.vname)。其他属性也是如此。

标签: c# wpf datagrid overriding observablecollection


【解决方案1】:

你可以把你的班级改成这样...

  public class VLANSPropertyClass
    {
        public string vname { get; set; }

        public int S_No { get; set; }

        public string vid { get; set; }

        public string ip { get; set; }

        public string vports { get; set; }
        public override string ToString()
        {
            return String.Format("Name: {0}, Serial {1}", vname, S_No);
        }
    }

此更改包括对 ToString 方法的覆盖。只要框架需要您的类的字符串表示,就会调用它。

ToString 是 .NET Framework 中的主要格式化方法。它 将对象转换为其字符串表示形式,使其适合 用于展示。 (有关 .NET 格式支持的信息 框架,请参阅格式化类型。)

来源:http://msdn.microsoft.com/en-us/library/system.object.tostring.aspx

使用对ToString 的覆盖将让您执行此Console.WriteLine(v); 并获得预期结果。

【讨论】:

    【解决方案2】:

    当您遍历 ObservableCollection 时,通过索引访问它会以字符串的形式返回集合的完整实例/项,您现在需要使用索引或属性引用此字符串(如果它是用户定义的类型(class)) 为了访问真实的内容,在我的情况下,我这样做是为了访问集合混乱项目的 temp 属性。

    mess[mj_key][mn_key][0].Temp.ToString()
    

    这里我有 3 个维度,暂时避免它,只需了解 0 索引返回字符串对象,然后我使用 .Temp 访问温度

    希望对你有帮助!

    【讨论】:

    • 你至少可以说出-1的原因,因为我分享了我所做的。谢谢。
    猜你喜欢
    • 2011-02-06
    • 2014-04-11
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2021-03-05
    • 1970-01-01
    相关资源
    最近更新 更多