マスターとスレーブDataGrid
があり、マスターにはさまざまな顧客オブジェクトが含まれています。マスターで特定の顧客が選択されると、その顧客による注文が子に表示されます。(各顧客にはObservableCollection<order>
orders プロパティがあります。注文には配送先住所と数量があります。私は次の XML を使用します
<StackPanel DataContext="{StaticResource Customers1}" Orientation="Horizontal">
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False"
IsSynchronizedWithCurrentItem="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid ItemsSource="{Binding /orders}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Delivery Adress">
<DataGridTextColumn.Binding>
<Binding Path="deliveryAddress"></Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Quantity">
<DataGridTextColumn.Binding>
<Binding Path="quantity">
<Binding.ValidationRules>
<local:PositiveDoubleValidationRule></local:PositiveDoubleValidationRule>
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
配達日と数量は編集可能です。数量が正の double に解析され、それ以外の場合は検証エラーが発生することを保証するカスタム検証ルールを追加しました。
これは機能しますが、現在の顧客 (Mark) の注文にまだ検証エラーがある間に別の顧客 (Robert) を選択し、間違った入力を持つ顧客 (Mark) を再度選択すると、アプリケーションは動作を停止します。(ポップアップ表示: [アプリケーション名] が動作を停止しました)。
マスターがComboBox
. しかし、不思議なことに、子が単純な の場合は発生しませんTextBox
。
とにかく、これを修正する解決策を考え出そうとしましたが、これまでのところ、まともなものを思い付くことができませんでした. 良い選択肢は何ですか?
編集:私のクラスの注文は次のように実装されています:
class Order
{
public string deliveryAddress
{
get;
set;
}
public double quantity
{
get;
set;
}
public Order()
{
}
}
Customers は でありObservableCollection<customer>
、各 customer にはタイプ のプロパティ orders が含まれています
ObservableCollection<Order>
。