这一定很简单,但我似乎遗漏了一些东西。我已经搜索了几个小时,没有遇到任何可以解决我的问题的东西。问题是,虽然我可以将我的 LINQ 查询分配给 WPF DataGrid,但当我尝试编辑 DataGrid 的值之一时,我收到以下错误:
System.InvalidOperationException 未处理 Message='EditItem' 不允许用于此视图。Source=PresentationFramework StackTrace:在 System.Windows.Controls.ItemCollection.System.ComponentModel.IEditableCollectionView.EditItem(Object item) 在 System.Windows.Controls.DataGrid.EditRowItem(Object rowItem) 在 System.Windows.Controls.DataGrid.OnExecutedBeginEdit( ExecutedRoutedEventArgs e) 在 System.Windows.Controls.DataGrid.OnExecutedBeginEdit(Object sender, ExecutedRoutedEventArgs e) 在 System.Windows.Input.CommandBinding.OnExecuted(Object sender, ExecutedRoutedEventArgs e)
我的 DataGrid 的 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>
我在 ComboBox 的 SelectedChange 事件中执行 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 实体”。我真的觉得我错过了一些非常基本和明显的东西,如果有人愿意向我指出的话!:-)
非常感谢。