当前位置: 代码迷 >> Windows Mobile >> listbox 绑定数据时 卡UI解决思路
  详细解决方案

listbox 绑定数据时 卡UI解决思路

热度:400   发布时间:2016-04-25 07:20:25.0
listbox 绑定数据时 卡UI
数据是完全显示了,但是UI有点卡, 数据也就几十条。。。。
附上代码:数据模板 
 <ListBox  x:Name="listbox1">
                     <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Margin="0,0,0,10">

                                    <TextBlock Name="displayname" FontSize="35" Text="{Binding Displayname}"/>

                                    <TextBlock Name="phonenum" Text="{Binding PhoneNum}"/>

                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
</ListBox  x:Name="listbox1">

数据绑定: listbox1.ItemsSource = suoxie;//suoxie里就只有大概40多条数据。。。

------解决方案--------------------
我明白你的意思了。。。其实,你可以做一个full list,然后按键时,做filter,这样,第一次键盘显示时,你放在onnavigatdto事件中(速度还ok)显示全部号码,然后每次按0~9时,过滤List<>,重新绑定。

试一下,我没试验过,但是测试上面的代码时,第一次的慢,会被后面的reload冲掉,提高客户的感受。没有实际数据(其实很难拿到,因为wp异步绑定的),你试一下先。
------解决方案--------------------

 ObservableCollection<Person> plist = new ObservableCollection<Person>();
        public MainPage()
        {
            InitializeComponent();
            listbox1.DataContext = plist;
        }
        
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            ThreadPool.QueueUserWorkItem((o) =>
            {
                for (int i = 0; i < 40; i++)
                {
                    Person p = new Person();
                    p.Displayname = String.Format("姓名{0}", i + 1);
                    p.PhoneNum = String.Format("电话{0}", i + 1);
                    this.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        plist.Add(p);
                    }));
                }
            });
        }
  相关解决方案