WPF: Datagrid сортирует Listbox, привязанный к той же коллекции - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть два элемента WPF, связанные с одной и той же ObservableCollection.Один - это Datagrid, а другой - ListBox.Когда Datagrid используется для сортировки по столбцу (с использованием встроенных заголовков столбцов), действие размещает элементы в списке в том же порядке.Другими словами, кажется, что действие сортировки в Datagrid влияет на упорядочение базовой коллекции.Есть ли способ отключить это поведение?

Вот XAML для Datagrid:

                   <DataGrid 
                        IsReadOnly="True">
                        >
                        <DataGrid.Columns>
                            <DataGridTextColumn  
                                Binding="{Binding no}" >
                                <DataGridTextColumn.Header>
                                    <TextBlock>
                                    File<LineBreak/>No.
                                    </TextBlock>
                                </DataGridTextColumn.Header>
                            </DataGridTextColumn>

                            <DataGridTextColumn  
                                Header="Name" 
                                Binding="{Binding fileName}" />

                            <DataGridTextColumn Binding="{Binding channels}" >
                                <DataGridTextColumn.Header>
                                    <TextBlock TextAlignment="Center">
                                    Channels<LineBreak/>[#]
                                    </TextBlock>
                                </DataGridTextColumn.Header>
                            </DataGridTextColumn>

                        </DataGrid.Columns>
                    </DataGrid>

и Listbox:

                    <ListBox 
                        SelectedIndex="{Binding fileListSelectedIndex}"
                        SelectedItem="{Binding fileListSelectedItem}"
                        >
                        <ListBox.Resources>
                            <DataTemplate DataType="{x:Type local:FileListItem}">
                                <TextBlock Text="{Binding Path=fileName}"/>
                            </DataTemplate>
                        </ListBox.Resources>
                    </ListBox>

наконец, код привязки:

        filelist.ItemsSource = vm.fileList;
        multiFileParamGrid.ItemsSource = vm.fileList;

1 Ответ

0 голосов
/ 24 сентября 2018

ItemsSource использует специальный тип оболочки (ICollectionView) при привязке к некоторой последовательности или коллекции.Эта оболочка обеспечивает сортировку.Объект-оболочка по умолчанию получается из метода CollectionViewSource.GetDefaultView.Когда два ItemsControls (DataGrid и ListBox) связываются с одной и той же коллекцией (vm.fileList), они (и любой другой код) получат один и тот же объект-оболочку.

Но возможно создать другой экземпляр оболочкиспециально:

filelist.ItemsSource = vm.fileList;
multiFileParamGrid.ItemsSource = new ListCollectionView(vm.fileList);
...