我的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>
在我的列表框的数据模板中有一个名为“txtNumber”的文本框。我正在调用它的Textchange事件并在其textchange
我正在做一些像这样的操作
TextBox txtbox = sender as TextBox;
Dispatcher.BeginInvoke(() =>
{
ContactModel model = lstContactModel.LastOrDefault();
if (string.IsNullOrEmpty(model.Name) && string.IsNullOrEmpty(model.Phone))
{
lstContactModel.Remove(model);
lstContactModel.Add(new ContactModel { Name = txtbox.Text, Phone = txtbox.Text + ",", IsEnabled = false });
}
lstSelectedNumber.ItemsSource = null;
lstSelectedNumber.ItemsSource = lstContactModel;
var Selecteditem = lstSelectedNumber.Items[lstSelectedNumber.Items.Count - 1];
lstSelectedNumber.ScrollIntoView(Selecteditem);
lstSelectedNumber.UpdateLayout();
});
我将新项目添加到我的列表然后重新绑定到我的列表框,我滚动到列表框的末尾,但它不起作用。
它表现出非常奇怪的行为。一旦此语句运行它添加项目并将焦点转移到另一个不在此列表框中的文本框(它是我的wp7页面中的下一个控件)。任何人都可以建议它有什么问题吗?
答案 0 :(得分:0)
是否有原因,为什么您删除ItemsSource
并重新设置它。
我建议使用ObservableCollection
并让DataBinding
引擎发挥其魔力。
答案 1 :(得分:0)
lstbox.Dispatcher.BeginInvoke(() =>
{
lstbox.ItemsSource = null;
lstbox.ItemsSource = lstContactModel;
var Selecteditem = lstbox.Items[lstbox.Items.Count - 1];
lstbox.ScrollIntoView(Selecteditem);
lstbox.UpdateLayout();
});