背景:
考虑这个 XAML 片段:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<DataGrid
Grid.Row="0"
x:Name="dataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=Bobs}"
>
<DataGrid.Columns>
<DataGridTextColumn
Header="Name"
Binding="{Binding Name}"
MinWidth="75"
/>
</DataGrid.Columns>
</DataGrid>
<ListBox
Grid.Row="1"
x:Name="listBox"
DisplayMemberPath="Name"
ItemsSource="{Binding ElementName=dataGrid, Path=SelectedItem.Regions}"
SelectionMode="Multiple"
>
<Interactivity:Interaction.Behaviors>
<ListBoxBehaviors:SynchronizeSelectedItemsBehavior Selections="{Binding ElementName=dataGrid, Path=SelectedItem.SelectedRegions}"/>
</Interactivity:Interaction.Behaviors>
</ListBox>
</Grid>
假设我有一个单独的控件,它在切换时会将 Grid 的 IsEnabled 属性设置为 false。这样做的效果是禁用网格中的 DataGrid 和 ListBox 控件。
在 .NET 4.0 中,禁用 DataGrid 的不幸副作用是DataGrid 取消选择所有单元格,因此其 SelectedItem 丢失。这具有触发 ListBox 的 ItemsSource 绑定的副作用,导致 ItemsSource 被清除,因为 dataGrid 的 SelectedItem 已变为空。
问题:
如何更改绑定或更改我的 XAML,以便当 dataGrid 的 SelectedItem 变为 null 时,不会清除 ListBox 的项目集合。
附录:
- 我意识到取消选择 DataGrid 行为已在 .NET 4.5 中删除,但现在升级不是一个选项。
- 我知道有规避取消选择 DataGrid 行为的解决方案;我想知道是否可以在不使用它们的情况下解决我的问题。