我有主从DataGrid
,主人包含不同的客户对象。在主服务器中选择特定客户时,子服务员会显示该客户的订单。 (每个客户都有ObservableCollection<order>
订单属性。订单有交货地址和数量。我使用以下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),该应用程序停止工作。 (弹出窗口说明:[应用程序名称]已停止工作)。
当主服务器为ComboBox
时,其他情况下也会发生错误。然而,奇怪的是,当孩子是一个简单的TextBox
时,它不会发生。
无论如何,我试图提出解决这个问题的解决方案,但到目前为止我还没有找到一些体面的东西。什么是好的选择?
编辑:我的班级订单实施如下:
class Order
{
public string deliveryAddress
{
get;
set;
}
public double quantity
{
get;
set;
}
public Order()
{
}
}
客户是ObservableCollection<customer>
,每个客户都包含类型的属性订单
ObservableCollection<Order>
。
答案 0 :(得分:0)
它很有用,但不是使用集合同步,而是直接尝试绑定到所选项目。类似的东西:
<StackPanel DataContext="{StaticResource Customers1}" Orientation="Horizontal">
<DataGrid x:Name="MasterGrid" ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid ItemsSource="{Binding SelectedItem.orders, ElementName=MasterGrid}" 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>
最好为视图模型上的所选项目提供一个属性,而不是使用元素名称绑定,但测试是可以的。