2012-06-06 146 views
0

我有一个列表框和一个文本框。我想处理它的关键事件,但它给我一个错误。listbox.itemsource = null;抛出异常wp7

<ListBox Name="lstSelectedNumber" Height="50" MaxHeight="120" VerticalAlignment="Top" Grid.Column="1" SelectionChanged="lstSelectedNumber_SelectionChanged"> 
          <ListBox.ItemContainerStyle> 
           <Style TargetType="ListBoxItem"> 
            <Setter Property="Padding" Value="-15" /> 
            <Setter Property="Margin" Value="0"/> 
           </Style> 
          </ListBox.ItemContainerStyle> 
          <ListBox.ItemsPanel> 
           <ItemsPanelTemplate> 
            <toolkit:WrapPanel> 
            </toolkit:WrapPanel> 
           </ItemsPanelTemplate> 
          </ListBox.ItemsPanel> 
          <ListBox.ItemTemplate> 
           <DataTemplate> 
            <StackPanel> 
            <TextBox x:Name="txtNumber" Text="{Binding Name,Mode=TwoWay}" IsEnabled="{Binding IsEnabled,Mode=TwoWay}" Background="Transparent" Foreground="{StaticResource ContactSelectorBrush}" Style="{StaticResource DialNumberStyle}" FontSize="24" KeyUp="txtNumber_KeyUp"> 
             <TextBox.CaretBrush> 
              <SolidColorBrush Color="{StaticResource CaretBrush}" /> 
             </TextBox.CaretBrush> 
            </TextBox> 
            </StackPanel> 
           </DataTemplate> 
          </ListBox.ItemTemplate> 
         </ListBox> 



private void txtNumber_KeyUp(object sender, KeyEventArgs e) 
     { 
      TextBox txtbox = sender as TextBox; 
      if (txtbox.Text.Contains(';')) 
      { 
       lstSelectedNumber.ItemsSource = null; 
       // My Application Got crashed at this point when i assign nullto item source 
       lstSelectedNumber.ItemsSource = lstContactModel; 
      } 

是否有任何替代,我更新的集合是该列表框的itemsource。请告诉我任何解决方法。

+0

你看到什么异常? –

回答

0

我有固定的这个问题我自己。 问题是这样的当我的文本框事件被称为它做我的列表中的一些变化,并绑定空来源到我的列表框和这种变化的影响我的用户界面和用户界面无法处理这种变化,所以我把我所有的代码在调度,所以一旦所有事情已经完成它反映了用户界面和用户界面接受的变化

private void txtNumber_KeyUp(object sender, KeyEventArgs e) 
     { 
      TextBox txtbox = sender as TextBox; 
      if (txtbox.Text.Contains(';')) 
      { 
       Dispatcher.BeginInvoke(() => 
       { 
        lstSelectedNumber.ItemsSource = null; 
        lstSelectedNumber.ItemsSource = lstContactModel; 
       }); 
      } 
     } 
0

这是因为它激发了lstSelectedNumber_SelectionChanged事件。 把一个调试器放在异常声明并按下F11将带你到这个事件。

更换

lstSelectedNumber.ItemsSource = null; 
lstSelectedNumber.ItemsSource = lstContactModel; 

lstSelectedNumber.SelectionChanged -= lstSelectedNumber_SelectionChanged; 
lstSelectedNumber.ItemsSource = null; 
lstSelectedNumber.ItemsSource = lstContactModel; 
lstSelectedNumber.SelectionChanged += lstSelectedNumber_SelectionChanged; 
+0

它不以这种方式工作以及我的代码不会选择更改事件。 –