在ItemSource设置为null后,ListBox无法添加项目

时间:2013-08-13 10:20:48

标签: wpf silverlight listbox wpf-controls itemssource

我已将第一个ListBox'ListBox1'的ItemsSource属性指定为另一个ListBox的ItemsSource,即'ListBox2'。如果我将ListBox2的ItemsSource设置为null,那么我无法将任何项目进一步添加到ListBox1的ItemsSource。

以下是xaml片段

         <ListBox VerticalAlignment="Top" HorizontalAlignment="Center" Width="150" Margin="0 25 0 0"
                 x:Name="ListBox1" ItemsSource="{Binding Coll,Mode=TwoWay}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding _Name}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

        <ListBox VerticalAlignment="Top" HorizontalAlignment="Center" Width="150" Margin="0 25 0 0"
                 x:Name="ListBox2" ItemsSource="{Binding Path=ItemsSource,ElementName=ListBox1,Mode=TwoWay}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding _Name}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

在Code back中,我将ListBox2的ItemSource设置为null,如下面的按钮点击,

        ListBox2.SetCurrentValue(ListBox.ItemsSourceProperty, null);

完成后,我尝试将项目添加到ListBox1的“Coll”集合中,但抛出NRE表示“Coll”为空。

任何建议plz。

此致 Dinesh Kumar P

1 个答案:

答案 0 :(得分:0)

ListBox2.ItemsSource设置为ListBox1.ItemsSource时,null上的双向约束将ListBox2.ItemsSource设置为null。随后,ListBox1.ItemsSource上的双向绑定也将Coll设置为null

不要双向进行ItemsSource绑定。没有必要,仍会收到收集更改。

<ListBox x:Name="ListBox1"
         ItemsSource="{Binding Coll}" ... >
    ...
</ListBox>
<ListBox x:Name="ListBox2"
         ItemsSource="{Binding Path=ItemsSource, ElementName=ListBox1}" ... >
    ...
</ListBox>

您要实现的目标并不是很清楚,但最好还是将ListBox2.ItemsSource直接绑定到Coll属性。