gpt4 book ai didi

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

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

Download Sample Project

我有一个绑定(bind)到 ObservableCollection 的 wpf 4 数据网格。这个 ObservableCollection 是在另一个线程上更新。我可以很好地看到我的简单 GUI 的更新。我什至可以对数据进行排序。但这种排序并不“粘”。当您单击列标题时,它将排序一次,但当集合中的值更改时,排序不会相应更改。

MainWindow 支持代码是大部分操作发生的地方(只是为了简单起见)。我创建一个 ObservableCollection 并将其传递给一个线程,该线程对 ObservableCollection 进行实际写入。然后,我通过 CollectionView 将相同的 ObservableCollection 绑定(bind)到数据网格(我也尝试过直接绑定(bind)它)。我的预感是排序取决于 collectionChanged 事件,我很确定该事件不会触发调度程序(请参阅: 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 中绑定(bind)?您也许无法线程化集合创建。我没有经验 DataGrid 排序在 IsAsynchonous="True"背后的行为方式。

    <ObjectDataProvider IsAsynchonous="True" ...>

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

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