Обновление данных в ListView
Atom Ответить
12.09.2017


Подскажите пожалуйста как правильно использовать GuiAsync().
Есть WPF-приложение с таблицей ListView, которая привязана к переменной aaa.
При нажатии на кнопку происходит добавление элемента в переменную ааа. В памяти при отладке я его вижу, но в таблицу он не добавляется.
Как правильно обновить таблицу, чтобы в ней появился новый элемент?
Код

public class aaaClass
{
public decimal lastPrice;
public decimal bestAskPrice;
public decimal fallPercent;
}
public ObservableCollection<aaaClass> aaa = new ObservableCollection<aaaClass>();
...
private void TestClick(object sender, RoutedEventArgs e)
{
var curBond = new aaaClass
{
lastPrice = 100m,
bestAskPrice = 95m,
};
aaa.Add(curBond);
this.GuiAsync(() => aaaGrid.Items.Refresh());
}




Спасибо:




11 Ответов
Support

Фотография
Дата: 12.09.2017
Ответить


Код
this.GuiAsync(() => aaa.Add(curBond));
Спасибо:

Simen

Фотография
Курсы
Дата: 12.09.2017
Ответить


Так тоже не работает.
Нажимаю на кнопку "Test" и ничего не происходит.

Полный код проекта:


Полный код XAML:


Прикрепляю архив с проектом на всякий случай
GuiAsyncTest.7z 5 KB (0)
Автор топика
Спасибо:

Support

Фотография
Дата: 12.09.2017
Ответить


Вы не сделали связку между коллекций и контролом. aaaGrid.ItemsSource
Спасибо:

Simen

Фотография
Курсы
Дата: 12.09.2017
Ответить


Ну вот же связка, если я правильно понимаю:
Код
<ListView Grid.Row="1" ItemsSource="{Binding aaa}" Name="aaaGrid" Margin="5,5,5,5">


Или речь идет о какой-то другой связке?

Автор топика
Спасибо:

Support

Фотография
Дата: 13.09.2017
Ответить


Simen Перейти
Ну вот же связка, если я правильно понимаю:
Код
<ListView Grid.Row="1" ItemsSource="{Binding aaa}" Name="aaaGrid" Margin="5,5,5,5">


Или речь идет о какой-то другой связке?



Попробуйте это сделать в конструкторе окна.
Спасибо:

Support

Фотография
Дата: 13.09.2017
Ответить


Simen Перейти
Ну вот же связка, если я правильно понимаю:
Код
<ListView Grid.Row="1" ItemsSource="{Binding aaa}" Name="aaaGrid" Margin="5,5,5,5">


Или речь идет о какой-то другой связке?



Попробуйте это сделать в конструкторе окна.
Спасибо:

Simen

Фотография
Курсы
Дата: 13.09.2017
Ответить


Я не понимаю, что это значит:
Цитата:
Попробуйте это сделать в конструкторе окна.


А вы в конструкторе сделали связку? У вас заработал пример после этого?

И, может быть, дело не в связке, а в неправильном использовании this.GuiAsync() ?
Автор топика
Спасибо:

Support

Фотография
Дата: 13.09.2017
Ответить


Simen Перейти
Я не понимаю, что это значит:
Цитата:
Попробуйте это сделать в конструкторе окна.


Напишите код с инициализацией ItemsSource на C# в конструкторе MainWindow.
Спасибо:

Simen

Фотография
Курсы
Дата: 13.09.2017
Ответить


Спасибо за наводку.
Добавил инициализацию так:

Код
public MainWindow()
{
InitializeComponent();
aaaGrid.ItemsSource = aaa;
}

Но таблица все равно не обновляется, к сожалению. Crying
Автор топика
Спасибо:

Support

Фотография
Дата: 13.09.2017
Ответить


Да, дело было в другом. Поменяйте ваш класс на

Код
public class aaaClass
{
public decimal lastPrice { get; set; }
public decimal bestAskPrice { get; set; }
}
Спасибо: Simen

Simen

Фотография
Курсы
Дата: 13.09.2017
Ответить


Заработало!
Спасибо!
Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy