当绑定源变为null时,如何阻止ListBox的ItemsSource被清除?

时间:2012-10-30 04:09:56

标签: c# wpf xaml data-binding

背景

考虑这个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 unselects all cells,因此其SelectedItem将丢失。这具有触发ListBox的ItemsSource绑定的副作用,导致ItemsSource被清除,因为dataGrid的SelectedItem已变为null。

问题:

如何更改绑定或更改我的XAML,以便当dataGrid的SelectedItem变为null时,不会清除ListBox的items集合。

补遗:

  1. 我意识到在.NET 4.5中删除了取消选择的DataGrid行为,但现在无法升级。
  2. 我知道有一些解决办法来规避未选择的DataGrid行为;我想知道是否有可能在不使用它们的情况下解决我的问题。

0 个答案:

没有答案