0

我有一个列表框和一个文本框。我想处理它的 keyup 事件,但它给了我一个错误。

<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。请告诉我任何解决方法。

4

2 回答 2

0

那是因为它会触发lstSelectedNumber_SelectionChanged事件。将调试器放在异常语句上并按 F11 将带您进入此事件。

代替

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

lstSelectedNumber.SelectionChanged -= lstSelectedNumber_SelectionChanged;
lstSelectedNumber.ItemsSource = null;
lstSelectedNumber.ItemsSource = lstContactModel;
lstSelectedNumber.SelectionChanged += lstSelectedNumber_SelectionChanged;
于 2012-06-06T10:22:33.573 回答
0

我自己解决了这个问题。问题是,当我的文本框事件被调用时,它会在我的列表中进行一些更改并将空源绑定到我的列表框,并且此更改会影响我的 UI 和 UI 无法处理该更改,因此我将所有代码都放在调度程序中事情已经完成,它反映了 UI 的变化和 UI 接受

 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;
                });
            }
        }
于 2012-06-07T06:48:01.460 回答