Скачать пример проекта
У меня есть таблица данных wpf 4, связанная с ObservableCollection.Эта коллекция ObservableCollection обновляется в другом потоке.Я могу видеть обновления, поступающие на мой простой графический интерфейс, просто отлично.Я даже могу отсортировать данные.Но сортировка не "прилипает".Он будет отсортирован один раз, когда вы щелкнете по заголовку столбца, но когда значение в коллекции изменится, сортировка не изменится соответственно.
Код поддержки MainWindow - это то место, где большинство действий прекращается (просто для простоты примера).Я создаю ObservableCollection и передаю его потоку, который выполняет фактическую запись в ObservableCollection.Затем я связываю ту же ObservableCollection с сеткой данных через CollectionView (я также пытался связать ее напрямую).Я догадываюсь, что сортировка зависит от события collectionChanged, которое, я уверен, не вызовет Dispatcher (см .: http://bea.stollnitz.com/blog/?p=34).
Что делать?
public partial class MainWindow : Window
{
private Thread _dataThread;
private Thread _marketThread;
private SampleData _sampleData;
private Market _market;
private ObservableCollection<Stock> stocks;
private ConcurrentQueue<Stock> _updates = new ConcurrentQueue<Stock>();
public MainWindow()
{
InitializeComponent();
stocks = new ObservableCollection<Stock>();
for (var i = 0; i < 5; i++)
{
var newStock = new Stock();
newStock.Id = (uint)i;
stocks.Add(newStock);
}
var source = CollectionViewSource.GetDefaultView(stocks);
dataGrid.ItemsSource = source;
_sampleData = new SampleData(_updates);
_dataThread = new Thread(_sampleData.CreateData) { Name = "Data Thread" };
_dataThread.Start();
_market = new Market(_updates, stocks);
_marketThread = new Thread(_market.Start){Name = "Market Thread"};
_marketThread.Start();
}
}
Challenge.
Загрузить пример проекта