1

背景:

考虑这个 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 的项目集合。

附录:

  1. 我意识到取消选择 DataGrid 行为已在 .NET 4.5 中删除,但现在升级不是一个选项。
  2. 我知道有规避取消选择 DataGrid 行为的解决方案;我想知道是否可以在不使用它们的情况下解决我的问题。
4

0 回答 0