これは非常に単純なはずですが、何かが足りないようです。私は自分の問題を解決できるものに出くわすことなく、数時間探し回っていました。問題は、LINQクエリをWPF DataGridに割り当てることはできますが、DataGridの値の1つを編集しようとすると、次のエラーが発生することです。
System.InvalidOperationExceptionは未処理でしたMessage='EditItem'はこのビューでは許可されていません。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)
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エンティティ」を使用しています。誰かが私にそれを指摘するほど親切であるならば、私は本当に私が非常に基本的で明白な何かを逃していると感じます!:-)
どうもありがとう。