我有一个WPF应用程序,我在其中使用带有mysql connector / net的实体框架来获取数据。我有一个组合框,里面装满了桌子上的物品。 datagrids itemssource属性绑定到组合框'selecteditem.staff属性,该属性正确显示数据。问题是我无法对这些数据进行排序。如果我将数据直接绑定到datagrid,则排序可以正常工作。但是,如果我将数据绑定到组合框,然后将数据网格绑定到网格的选定项目,则排序将丢失。
实体框架数据检索
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属性但没有成功。我认为这与数据网格如何填充不是由所选项目填充,而是由.staff工作人员集合填充。
提前致谢, 麦克
答案 0 :(得分:1)
首先,我会尝试为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>
指定绑定方向,就像这样
SelectedItem
如果这对您不起作用,另一种解决方案可能是:
首先将combo
的{{1}}绑定到属性,DataGrid
绑定到另一个集合。
在combo
绑定更改后,使用已排序数据填充DataGrid
的绑定集合。
希望这有帮助。