MainWindowというウィンドウにDataGridコントロールがあります。MainWindowから、ボタンクリックで次のコードを使用してNewCustomerWindowという別のウィンドウを開きます。
NewCustomerWindow newCustomerWindow = new NewCustomerWindow();
newCustomerWindow.ShowDialog();
NewCustomerWindowには、誰かが顧客に関する情報を入力できるテキストボックスを備えたフォームがあり、これらの情報はデータベースに保存されます。これらの情報を保存した後、メインウィンドウのDataGridを更新したいので、次のコードを使用します
var mainWindow = Application.Current.Windows
.OfType<MainWindow>()
.FirstOrDefault(window => window is MainWindow);
mainWindow.customersGrid.Items.Add(new
{
CustomerID = txtCustomerID.Text,
CompanyName = txtCompanyName.Text,
ContactName = txtContactName.Text,
ContactTitle = txtContactTitle.Text,
Address = txtAddress.Text,
City = txtCity.Text,
Region = txtRegion.Text,
PostalCode = txtPostalCode.Text,
Country = txtCountry.Text,
Phone = txtPhone.Text,
Fax = txtFax.Text
});
上記のコードは、次のエラーを返します。「ItemsSourceの使用中は操作が無効です。代わりにItemsControl.ItemsSourceを使用して要素にアクセスして変更してください。」
CustomersGridはMainWindowのDataGridの名前であり、その構造は次のとおりです。
<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Stretch" Margin="8,29,8,8" Name="customersGrid" VerticalAlignment="Stretch" Loaded="customersGrid_Loaded">
<DataGrid.Columns>
<DataGridTextColumn Width="Auto" Binding="{Binding CustomerID}" Header="Κωδικός Πελάτη"/>
<DataGridTextColumn Width="Auto" Binding="{Binding CompanyName}" Header="Όνομα Εταιρίας"/>
<DataGridTextColumn Width="Auto" Binding="{Binding ContactName}" Header="Όνομα Επαφής"/>
<DataGridTextColumn Width="Auto" Binding="{Binding ContactTitle}" Header="Τίτλος Επαφής"/>
<DataGridTextColumn Width="Auto" Binding="{Binding Address}" Header="Διεύθυνση"/>
<DataGridTextColumn Width="Auto" Binding="{Binding City}" Header="Πόλη"/>
<DataGridTextColumn Width="Auto" Binding="{Binding Region}" Header="Περιοχή"/>
<DataGridTextColumn Width="Auto" Binding="{Binding PostalCode}" Header="Ταχυδρομικός Κώδικας"/>
<DataGridTextColumn Width="Auto" Binding="{Binding Country}" Header="Χώρα"/>
<DataGridTextColumn Width="Auto" Binding="{Binding Phone}" Header="Τηλέφωνο"/>
<DataGridTextColumn Width="Auto" Binding="{Binding Fax}" Header="Fax"/>
</DataGrid.Columns>
</DataGrid>
解決策は、DataGridのItemsSourceプロパティをすべてのデータで再度設定することだと思いますが、顧客のデータは多くのレコードをもたらすwcfサービスからのものであるため、これは適切な選択ではありません。それで、この問題の良い解決策は何ですか?前もって感謝します。