2015-10-14 3 views
0

Мой вопрос для WPF (не выиграть формы) и очень похож на это: Add Items to Columns in a WPF ListViewДобавить товары в Колонном в ListView WPF в коде

Тем не менее, у меня есть устаревшие проблемы, как я должен использовать-структуру, которая содержит около 100 переменных. Структура должна быть передана в функцию, которая обновит свои значения.

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

Я использую System.Reflections извлечь вне fieldinfo.name и GetValue(), чтобы получить значения переменных. Затем я хочу отобразить их в ListView (созданных во время выполнения), как

Переменные имя | Значение (< --- Это заголовки столбцов)

item1 .............. | 1223.3

item2 ..... ........ | 6.673

... ..................... | ...

item100 ........... | 1

Значения будут динамически меняться каждые несколько миллисекунд, когда объект struct обновляется с использованием подписки на системный канал. Я думал об очистке ListView и повторении заполнения графика каждый раз, когда это происходит (метод 1). Но мне нужна помощь в добавлении элементов в соответствующие столбцы.

Я также думал о создании класса с помощью метода INotifyPropertyChanged (метод 2), но это станет той же ситуацией, что и метод 1, поскольку мне еще нужно обновить класс, используя обновленную структуру. Я также не знаю, как установить привязку динамически, так как мой класс будет иметь 100 свойств.

Наконец-то я подумал об использовании ObservableCollection, но потом мне также придется очистить его содержимое и снова добавить элементы, поскольку структура будет обновляться через устаревшую функцию обновления (метод 3). Я не знаю, как быстро это по сравнению с методом 1.

+0

@MuhammadUsman он уже прочитал это, посмотри его вопрос. –

ответ

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" 
          } 
+0

Doh .. спасибо, я понял. Я буду использовать foreach для инкапсуляции функции lstvItemsList.Items.Add() и заполнить Listview с моими 100 переменными таким образом. Если это работает без отставания во время выполнения, я отвечу на это через пару дней :) Хотя я беспокоюсь, так как мои значения не являются строками, а разнообразием поплавков и целых чисел. – Mittens

+0

@ Миттенс, если вы можете пойти с этим, то что относительно структуры около 100 свойств? Если это то, что у вас есть, вы не можете пойти с этим решением. Вы должны много перепроектировать. И каждый раз, когда вы хотите изменить свойство в структуре, вместо того, чтобы писать этот 's.SomeProperty = something;', вам нужно написать этот 'var item = items.FirstOrDefault (p => p.itemName ==" SomeProperty "); if (item! = null) item.value = something; '. –

+0

это рассматривается как обход, а не прямое решение проблемы ОП. Оригинальная проблема имеет смысл, и она включает в себя так называемый *** поворот ***. Конечно, прямое решение этой проблемы непросто. –

Смежные вопросы