【问题标题】:Add Items to Columns in a WPF ListView in Code将项目添加到代码中的 WPF ListView 中的列
【发布时间】:2015-10-14 06:04:51
【问题描述】:

我的问题是针对 WPF(不是 win 表格),与此非常相似: Add Items to Columns in a WPF ListView

但是,我有遗留问题,因为我必须使用包含大约 100 个变量的结构。该结构需要被传递到一个函数中,该函数将更新其值。

struct alotofthings
{
float item1;
float item2;
.
.
.
UInt16 item100;
}

我使用 System.Reflections 提取 fieldinfo.name 和 GetValue() 来获取变量的值。接下来我想在 ListView(在运行时创建)中显示它们,例如

变量名 |值(

第 1 项 .................... | 1223.3

项目2 ..... ........ | 6.673

……………………|| ...

item100 ....| 1

随着使用系统管道订阅更新结构对象,这些值将每隔几毫秒动态更改一次。 我想每次发生这种情况时清除 ListView 并重新填充图表(方法 1)。但我需要帮助将这些项目添加到各自的列中。

我也想过使用 INotifyPropertyChanged(方法 2)创建一个类,但这将成为与方法 1 相同的情况,因为我仍然必须使用更新的结构来更新类。我也不知道如何动态设置绑定,因为我的类将有 100 个属性。

最后我确实想到了使用 ObservableCollection,但是当结构通过旧更新功能(方法 3)更新时,我还必须清除其内容并再次重新添加项目。我不知道这与方法1相比有多快。

【问题讨论】:

  • @MuhammadUsman 他已经读过了,看看他的问题。

标签: c# wpf listview


【解决方案1】:

试试这个方法

      <ListView x:Name="lstvItemsList">
      <ListView.View>
         <GridView>
            <GridViewColumn Header="Id" DisplayMemberBinding="{Binding itemName}"/>
             <GridViewColumn Header="Name" DisplayMemberBinding="{Binding value}"/>
         </GridView>
      </ListView.View>
     </ListView>

然后为保持值创建一个结构

    public struct Items
    {
        public string itemName { get; set; }
        public string value { get; set; }
    }

然后像这样绑定值

       lstvItemsList.Items.Add(new Items
                            {
                                itemName ="item1" ,
                                value = "125"
                            }

【讨论】:

  • Doh.. 谢谢我明白了。我将使用 foreach 封装 lstvItemsList.Items.Add() 函数,并以这种方式用我的 100 个变量填充 Listview。如果这在运行时没有滞后,那么我会在几天内接受答案:) 虽然我很担心,因为我的值不是字符串,而是各种浮点数和整数。
  • @Mittens 如果你能接受这个,那么大约 100 个属性的结构呢?如果这就是您所拥有的,那么您将无法使用此解决方案。你必须重新设计很多。并且每次你想改变结构上的一个属性,而不是写这个s.SomeProperty = something;,你必须写这个var item = items.FirstOrDefault(p =&gt; p.itemName == "SomeProperty"); if(item != null) item.value = something;
  • 这被认为是一种解决方法,而不是直接解决 OP 的问题。原来的问题是有道理的,它涉及到所谓的pivoting。当然,直接解决这个问题并不容易。
  • 很抱歉,我可能不清楚结构。我必须将结构声明为:'alotofthings stucture1'并将其传递给函数以获取数据:'GetData(ref structure1)'。然后我可能会尝试上述方法并将结构变量的字段名和值转换为字符串,例如 [Items.value = structure1.item1.ToString]。好吧,我先试试这个。
  • @King King O.o 对不起,我只是一个初学者。我什至不明白你说的旋转是什么意思!如果它没有被问到,也许你可以尝试在它上面创建问题。你可能会比我清楚得多......另外,我确实认为我的问题可能有更好的解决方案,但我会先尝试:3
猜你喜欢
  • 2013-03-29
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多