2011-12-16 60 views
0

我有一个WPF应用程序,我在其中使用实体框架与MySQL连接器/网络来获取数据。我有一个装满桌子物品的组合框。 datagrids itemssource属性绑定到组合框'selecteditem.staff属性,该属性正确显示数据。问题是我无法对这些数据进行排序。如果我将数据直接绑定到数据网格,则排序工作正常。但是,如果我将数据绑定到组合框,然后将数据网格绑定到网格的选定项,则排序会丢失。WPF DataGrid无法从组合框中挑选数据SelectedItem

实体框架数据检索

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> 

任何帮助将不胜感激,我曾尝试与DataGrid的没有成功CanUserSort财产播放。我相信这与数据网格的填充不是由选定的项目填充有关,而是由工作人员收集的。

由于提前, 迈克

回答

1

首先我想尝试与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> 

如果这并不为你工作,另一种解决方案可能是:

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

希望这会有所帮助。

+0

感谢您的建议,我试图指定一种方式,但得到了相同的结果。我会尝试你的建议,并做一个“CurrentOffice”属性,这是双向绑定的组合框,然后通知显示网格更新看看是否有效。谢谢 – 2011-12-16 13:51:35