我有 master-slave DataGrid
,而 master 包含不同的客户对象。当在主中选择特定客户时,子显示该客户的订单。(每个客户都有一个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>
交货日期和数量是可编辑的。我添加了一个自定义验证规则,以确保数量解析为正数,否则会导致验证错误。
这可行,但是当我选择另一个客户 (Robert) 而当前客户 (Mark) 的订单中仍然存在验证错误,然后再次选择输入错误的客户 (Mark) 时,应用程序将停止工作。(弹出说明:[应用程序名称]已停止工作)。
当 master 为ComboBox
. 然而,奇怪的是,当孩子是一个简单的 时,它不会发生TextBox
。
无论如何,我试图想出解决这个问题的解决方案,但到目前为止我还没有想出一些像样的东西。什么是好的选择?
编辑:我的班级订单执行如下:
class Order
{
public string deliveryAddress
{
get;
set;
}
public double quantity
{
get;
set;
}
public Order()
{
}
}
客户是一个ObservableCollection<customer>
,并且每个客户都包含一个订单类型的属性
ObservableCollection<Order>
。