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

标签 wpf sorting datagrid observablecollection dispatcher

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/

相关文章:

c# - 在 window mobile c# 中编辑数据网格

c# - WPF - 处理自定义控件上的自定义附加事件

c# - 3D WPF 中的最近邻图像采样

javascript - 排序多维数组的最佳方法

c - Array - 在 C 中按模数组排序

c# - 如何在 WPF C# 中使用 MVVM 模式将多个数据网格绑定(bind)到单个 SQLite 数据库?

c# - 在 .NET 中进行定时回调的最简单方法是什么?

wpf - 如何从 WPF 中的多分辨率 .ico 文件中选择合适大小的图标?

java - 合并排序具有可变字数的多个文件

c# - 当非虚拟化 DataGrid 中有大量行时,WPF 应用程序 DataGrid 控制窗口切换滞后