这必须非常简单, 但我似乎漏掉了一些东西。 我搜索了几个小时, 没有找到任何能解决我问题的东西。 问题是, 虽然我可以将我的 LINQ 查询指派给 WPF DataGrid, 但当我试图编辑 DataGrid S 的某个值时, 我得到的错误如下:
System.InvalidOperationException was unhandled Message= EditItem is not allowed for this view. Source=PresentationFramework StackTrace: at System.Windows.Controls.ItemCollection.System.ComponentModel.IEditableCollectionView.EditItem(Object item) at System.Windows.Controls.DataGrid.EditRowItem(Object rowItem) at System.Windows.Controls.DataGrid.OnExecutedBeginEdit(ExecutedRoutedEventArgs e) at System.Windows.Controls.DataGrid.OnExecutedBeginEdit(Object sender, ExecutedRoutedEventArgs e) at System.Windows.Input.CommandBinding.OnExecuted(Object sender, ExecutedRoutedEventArgs e)
数据仪的XAML 看起来像这个:
<DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" Height="565" HorizontalAlignment="Left" Margin="6,92,0,0" Name="translatedStringsDataGrid1" RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Top" Width="602">
<DataGrid.Columns>
<DataGridTextColumn x:Name="stringsIDColumn2" Binding="{Binding Path=StringsID}" Header="Strings Name" Width="SizeToHeader" />
<DataGridTextColumn x:Name="translatedStringsValueColumn1" Binding="{Binding Path=TranslatedStringsValue}" Header="Translated Strings Value" Width="SizeToHeader" />
</DataGrid.Columns>
</DataGrid>
我正在做一个 LINQ 查询, 在所选的 ComboBox 变换事件 中进行这样的 LINQ 查询 :
private void cbSelectLang_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var query = from o in _context.TranslatedStrings.Local
where o.LanguagesID == cbSelectLang.SelectedIndex + 1
join r in _context.Strings.Local on o.StringsID equals r.StringsID into SubSet2
from s in SubSet2.DefaultIfEmpty()
select new { StringsID = s.StringsName, TranslatedStringsValue = o.TranslatedStringsValue };
this.translatedStringsDataGrid1.ItemsSource = query;
}
我使用“POCO实体 ”, 如果有人觉得有比较容易的方法来完成这个任务的话。 我真的觉得我漏掉了一些非常基本和显而易见的东西, 如果有人能帮我指出这一点的话! :-)
非常感谢。