gpt4 book ai didi

wpf datagrid icollectionview 排序BUG?

转载 作者:行者123 更新时间:2023-12-04 15:33:27 27 4
gpt4 key购买 nike

也许有人可以帮助我?我有以下场景:

  1. 一个简单的 View :

    <Window x:Class="DataGridSortBug.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <DockPanel>
    <StackPanel DockPanel.Dock="Top">
    <Button Click="Button_Click">Refresh</Button>
    </StackPanel>

    <DataGrid ItemsSource="{Binding View}" />
    </DockPanel>
    </Window>
  2. 背后的代码:

    public partial class MainWindow : Window
    {
    public MainWindow()
    {
    InitializeComponent();

    DataContext = new ViewModel();
    }

    public class TestItem
    {
    private int _sequence;
    public int Sequence
    {
    get { return _sequence; }
    }

    public TestItem(int sequence)
    {
    _sequence = sequence;
    }
    }

    public class ViewModel
    {
    ObservableCollection<TestItem> _collection;

    private ICollectionView _view;
    public ICollectionView View
    {
    get { return _view; }
    }

    public ViewModel()
    {
    _collection = new ObservableCollection<TestItem>();
    _collection.Add(new TestItem(5));
    _collection.Add(new TestItem(2));
    _collection.Add(new TestItem(4));
    _collection.Add(new TestItem(3));
    _collection.Add(new TestItem(1));

    _view = CollectionViewSource.GetDefaultView(_collection);
    _view.SortDescriptions.Add(new SortDescription("Sequence", ListSortDirection.Ascending));
    }


    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
    DataContext = new ViewModel();
    }
    }

程序启动后,数据网格包含(如预期的那样):

1
2
3
4
5

点击按钮后:

5
2
4
3
1

但我实在想不明白为什么。我做错了什么还是这是一个错误?如果这是一个错误,是否有解决方法?

最佳答案

我刚遇到这个错误。 (或者至少我认为这是一个错误)。

调试时,您可以看到在将 ViewModel 分配给 DataContext 后,SortDescriptions 集合被清除。

作为解决方法,我从 ViewModel 的 CTOR 中删除了 SortDescriptions,并将它们放在一个公共(public)方法中,然后在将 ViewModel 分配给 DataContext 后调用该方法。

private void Button_Click(object sender, RoutedEventArgs e)
{
var model = new ViewModel();
DataContext = model; // SortDescriptions collection is cleared here.
model.AddSortDescriptions();
model.View.Refresh();
}

这远非理想,但这似乎是我能找到的唯一解决方法。

关于wpf datagrid icollectionview 排序BUG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6176771/

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