【问题标题】:WPF DataGrid Unable To Sort Data From ComboBox SelectedItemWPF DataGrid 无法对 ComboBox SelectedItem 中的数据进行排序
【发布时间】:2012-01-21 22:42:38
【问题描述】:

我有一个 WPF 应用程序,我在其中使用带有 mysql 连接器/网络的实体框架来获取数据。我有一个组合框,里面装满了表格中的项目。 datagrids 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 集合填充。

提前致谢, 迈克

【问题讨论】:

    标签: c# wpf entity-framework binding datagrid


    【解决方案1】:

    首先我会尝试用ModeDataGrid指定绑定方向,像这样

    <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>
    

    如果这对您不起作用,另一种解决方案可能是:

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

    希望这会有所帮助。

    【讨论】:

    • 感谢您的建议,我尝试指定一种方式,但得到了相同的结果。我会尝试您的建议并创建一个由组合框以两种方式绑定的“CurrentOffice”属性,然后通知显示网格进行更新,看看是否有效。谢谢
    猜你喜欢
    • 2017-10-06
    • 2023-02-06
    • 2014-05-30
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2011-01-10
    • 1970-01-01
    相关资源
    最近更新 更多