我已经找到了很多关于这个问题的答案,但我似乎无法正确使用语法。鉴于这里的解释以及我发现的许多其他解释,我已经尝试了所有我能想到的逻辑组合,但三周后我仍然无法理解。我只需要正确获取 XAML 的语法。
类:(为简单/保密而重命名)
UserControl1 - 包含三个全局列表,称为 Streets、Houses 和 Cars
Street - 包含两个仅关联的房屋和汽车的列表,称为 MyHouses 和 MyCars
House - 在 DataGrid 中显示,其中一列是 DataGridComboboxColumn,用于选择与此 House 关联的街道。在其中声明了一个名为 Street 的 Street 属性,以跟踪这一点并在 get/set 中进行其他计算。
Car - 在 DataGrid 中显示,其中一列是 DataGridComboboxColumn,用于选择此 Car 与哪条 Street 关联。在其中声明了一个名为 Street 的 Street 属性,以跟踪这一点并在 get/set 中进行其他计算。
如果需要,我可以重构后面的代码以匹配上面的代码并发布它。
XAML
<DataGrid ItemsSource="{Binding Streets, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Header="Street" Binding="{Binding StreetID, Mode=TwoWay}"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid ItemsSource="{Binding Cars, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding CarID, Mode=TwoWay}"/>
<DataGridComboBoxColumn
ItemsSource="{Binding Streets, RelativeSource={RelativeSource FindAncestor,AncestorType=UserControl1}, Mode=OneWay}"
SelectedItemBinding="{Binding Street}"
SelectedValue="{Binding StreetID}"
SelectedValuePath="StreetID"
DisplayMemberPath="StreetID">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Streets, RelativeSource={RelativeSource FindAncestor,AncestorType=UserControl1}, Mode=OneWay}"/>
<Setter Property="IsReadOnly" Value="True"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Streets, RelativeSource={RelativeSource FindAncestor,AncestorType=UserControl1}, Mode=OneWay}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
<DataGrid ItemsSource="{Binding Houses, Mode=TwoWay}">
<!--copy of Cars with changed names-->
</DataGrid>