2011-08-22 79 views
0

我有一个列表框,执行动态填充的自动完成功能。列表框显示员工照片的名称列表。我发现用图像填充数据很慢。WPF列表框异步绑定

我希望能够先填充名称,然后在收到数据时以异步方式上传数据。我该如何去做?

此刻我的图像类代码:

public class Img : INotifyPropertyChanged 
{ 
    private string name; 
    private Image image; 
    public event PropertyChangedEventHandler PropertyChanged; 

    public Img(string name, Image image) 
    { 
     this.name = name; 
     this.image = image; 
    } 

    public string Name 
    { 
     get { return name; } 
     set 
     { 
      name = value; 
      OnPropertyChanged("PersonName"); 
     } 
    } 

    public Image Image 
    { 
     get { return image; } 
     set 
     { 
      image = value; 
      OnPropertyChanged("Image"); 
     } 
    } 

    // Create the OnPropertyChanged method to raise the event 
    protected void OnPropertyChanged(string name) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 

用于填充数据的代码:

 foreach (KeyValuePair<string, string> entry in items) 
     { 
      System.Windows.Controls.Image webImage = new System.Windows.Controls.Image(); 
      webImage.Dispatcher.Invoke(DispatcherPriority.Normal, 
       (ThreadStart)delegate 
       { 

        BitmapImage image = new BitmapImage(); 
        image.BeginInit(); 
        image.UriSource = new Uri(//Where the source is); 
        image.EndInit(); 

        webImage.Source = image; 
       }); 
      myListBox.Items.Add(new Img(entry.Value, webImage)); 
     } 

我的XAML代码:

<Popup Name="myPopUp"> 
    <ListBox Name="myListBox" FontSize="14"> 
     <ListBox.ItemTemplate> 
      <DataTemplate DataType="{x:Type local:Img}"> 
       <StackPanel Orientation="Horizontal"> 
        <ContentPresenter Margin="3" Content="{Binding Image, IsAsync=True}"/> 
        <TextBlock Margin="3" Text="{Binding Name, IsAsync=True}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Popup> 

目前,它填充所有的名字+图像在同一时间......这会导致列表框变得难以忍受。

在此先感谢

回答