Arhn - архитектура программирования

C# WPF Заполнение сетки данных списком

Я написал этот код, который повторно создает новый список на каждой итерации. Цель состоит в том, чтобы отображать обновленный список в сетке данных на каждой итерации (что должно происходить каждые 1 с или около того).

Я думаю, что где-то ошибся в именовании или привязке в xaml, потому что я понимаю, что сетка данных должна автоматически заполнять возвращаемый список, но на данный момент она ничего не делает и остается пустой - что мне делать, чтобы заполнить сетку данных список?

Код итерации такой:

int i = 0;
do
{
    i += 1;
    UDPDataGrid.ItemsSource = LoadTimestamp(i);
    UDPDataGrid.Items.Refresh();
} while (FinalExit == false);

LoadTimestamp передает аргумент i и возвращает список, приведенный в сокращенном фрагменте ниже:

private List<RowEntry> LoadTimestamp(int i)
{
    // Initialise datagroup
    List<RowEntry> TimestampGroup = new List<RowEntry>();

    // Set port receiving
    UdpClient receivingUdpClient = new UdpClient(int.Parse(txtPort.Text));
    IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

    ....................
    ....................
    ....................

    return TimestampGroup;
}

Наконец, у меня есть запись в файле window.xaml следующим образом:

<Window x:Class="UDP_Receiver.MainWindow"
..........
Title="UDP Receiver" Height="750" Width="1200">
..........    
<Grid Margin="0,0,16,34">
<DataGrid Name="UDPDataGrid" ItemsSource="{Binding TimestampGroup}" HorizontalAlignment="Left" Height="300" Margin="29,55,0,0" VerticalAlignment="Top" Width="1107"/>
</Grid>
</Window>

  • Пока работает цикл do-while, ничего работать не будет, потому что это блокирует работу приложения (попробуйте перетащить окно приложения для проверки). Вместо этого используйте Task.Run(), Timer или async-await. Где находится петля? А можно полный код LoadTimestamp показать? 28.07.2020
  • Примечание. ItemsSource="{Binding TimestampGroup}" и UDPDataGrid.ItemsSource = LoadTimestamp(i) являются взаимоисключающими операциями. Выберите один: Binding+ObservableCollection сформируйте ответ или ItemsSource = с List. Или лучше узнать что-нибудь о INotifyPropertyChanged и его реализации. Я понимаю проблему, но не могу ответить на вопрос, потому что для воспроизведения проблемы нужно больше деталей, ясности и больше кода. 28.07.2020

Ответы:


1

Вы должны использовать ObservableCollection, что-то вроде этого

        int i = 0;
        do
        {
            i += 1;
            LoadTimestamp(int i);
        } while (FinalExit == false);


    public ObservableCollecation<RowEntry> TimestampGroup {set; get;} = new ObservableCollecation<RowEntry>();
    
    private void LoadTimestamp(int i)
    {
        TimestampGroup.Clear();

        // Set port receiving
        UdpClient receivingUdpClient = new UdpClient(int.Parse(txtPort.Text));
        IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

        // Update collection TimestampGroup here
    }
28.07.2020
  • Я основывал свой код на этой статье: c-sharpcorner.com/UploadFile /mahesh/datagrid-in-wpf, который не использует наблюдаемую коллекцию? 28.07.2020
  • И ваш подход не работает. Это работает, только если вы инициализировали свою коллекцию один раз. Если вам нужно изменить его в эфире, вы должны использовать ObservableCollection. 28.07.2020
  • ObservableCollection просто обеспечивает обновление пользовательского интерфейса, когда вы добавляете/удаляете строки, не заставляя DataGrid обновлять свой макет. Вместо этого можно назначить ItemsSource. Но проблема ОП не в этом. Проблема заключается в зависании приложения, поскольку цикл do-while блокирует основной поток пользовательского интерфейса. Таким образом, этот ответ полезен, но не поможет. 28.07.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..