gpt4 book ai didi

wpf - 绑定(bind)到在单独的线程上更新的ObservableCollection的WPF DataGrid无法维护排序

转载 作者:行者123 更新时间:2023-12-02 22:37:37 33 4
gpt4 key购买 nike

Download Sample Project

我有一个绑定到ObservableCollection的WPF 4数据网格。这个ObservableCollection是
在另一个线程上更新。我可以看到更新通过我的简单gui就很好了。我什至可以对数据进行排序。但是排序不会“坚持”。当您单击列标题时,它将排序一次,但是当集合中的值更改时,排序也不会相应地更改。

MainWindow支持代码是大多数操作失败的地方(仅出于示例简单起见)。我创建一个ObservableCollection并将其传递给对ObservableCollection进行实际写入的线程。然后,我通过CollectionView将相同的ObservableCollection绑定到datagrid(我也尝试过直接绑定它)。我的直觉是排序取决于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();

}

}


挑战。

Download Sample Project

最佳答案

您是否查看过ObjectDataProvider IsAsynchonous =“ True”并绑定到XAML中?您也许可以不对集合创建进行线程化。我没有经验如何在IsAsynchonous =“ True”之后对DataGrid进行排序。

    <ObjectDataProvider IsAsynchonous="True" ...>

关于wpf - 绑定(bind)到在单独的线程上更新的ObservableCollection的WPF DataGrid无法维护排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5131915/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com