WPF数据网格无法对组合框中选定项目的数据进行排序

本文关键字:数据 项目 排序 网格 数据网 组合 WPF | 更新日期: 2023-09-27 18:18:08

我有一个WPF应用程序,其中我使用实体框架与mysql连接器/net来获取数据。我有一个组合框,其中填满了表格中的项目。一个datagrid itemssource属性被绑定到组合框的selecteditem。Staff属性,该属性正确显示数据。问题是我无法对这些数据进行排序。如果我将数据直接绑定到数据网格,那么排序就能正常工作。但是,如果我将数据绑定到组合框,然后将数据网格绑定到网格的选定项,则排序将丢失。

实体框架数据检索

    private void RefreshOffices()
    {
        try
        {
            using (var context = new LDC_Entities())
            {
                cmbOffice.ItemsSource = context.Offices.Include("Staff.Roles").Include("Manager").ToList();
            }
        }
        catch (Exception eX)
        {
            MessageBox.Show(String.Format("Unable to retrieve offices'nError:{0}", eX.Message),"Error",
                MessageBoxButton.OK, MessageBoxImage.Error);
        }
    }

XAML绑定

<ComboBox Name="cmbOffice" Width="150" SelectedIndex="0">
<ComboBox.ItemTemplate>
    <DataTemplate>
        <TextBlock>
            <TextBlock.Text>
              <MultiBinding StringFormat="{}({0}) - {1}">
                <Binding Path="Office_ID"/>
                <Binding Path="City"/>
              </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<DataGrid Grid.Row="1" Margin="10,50,10,10" Name="displayGrid" IsReadOnly="True" AutoGenerateColumns="False" 
      ItemsSource="{Binding ElementName=cmbOffice, Path=SelectedItem.Staff}">
<DataGrid.Columns>
    <DataGridTextColumn Header="Staff ID" Binding="{Binding Staff_ID}"/>
    <DataGridTextColumn Header="Name" Width="120" Binding="{Binding Full_Name}" />
    <DataGridTextColumn Header="Address" Width="140" Binding="{Binding Address}" />
    <DataGridTextColumn Header="DOB" Width="80" Binding="{Binding DOB, StringFormat={}{0:dd/MM/yyyy}}" />
    <DataGridTextColumn Header="Telephone" Width="100" Binding="{Binding Telephone}" />
    <DataGridTextColumn Header="Roles" Width="*" Binding="{Binding RolesList}" />
</DataGrid.Columns>
</DataGrid>

任何帮助将不胜感激,我已经尝试玩数据网格的CanUserSort属性没有成功。我认为这与数据网格不是由选定的项填充,而是由工作人员的.staff集合填充有关。

提前感谢,迈克

WPF数据网格无法对组合框中选定项目的数据进行排序

首先,我将尝试使用Mode为DataGrid指定绑定方向,如下所示

<DataGrid Grid.Row="1" Margin="10,50,10,10" Name="displayGrid" IsReadOnly="True" AutoGenerateColumns="False" 
      ItemsSource="{Binding ElementName=cmbOffice, Path=SelectedItem.Staff, Mode=OneWay}">
<DataGrid.Columns>

如果这对你不起作用,另一个解决方案可以是:

首先将combo中的SelectedItem绑定到一个属性,DataGrid绑定到另一个集合。当combo绑定更改时,用已排序的数据填充DataGrid的绑定集合。