又一个wpf列表框刷新

时间:2012-06-11 09:59:57

标签: wpf

由于我是wpf的新手,我在关于类似主题的网页上失去了自己。我希望有人可以帮我解释一些我无法理解的基本内容。

我有一个wpf应用程序通过websocket连接到服务器。服务器每隔5秒返回一个List。每个新列表都与旧列表无关。当我得到新列表时,旧列表不再重要。玩家(在列表中)中唯一感兴趣的是他的身份证。

不知何故,我需要刷新或更新列表框。我用这种方式使用了可观察的集合:

private static ObservableCollection<Player> sample;
private static List<Player> sample2 = new List<Player>();
public List<Player> update
{
   set
   {
   sample2 = value;
   sample = new ObservableCollection<Player>((List<Player>) sample2);      
   onPropertyChanged(sample, "ID");
   }
 }


 private void onPropertyChanged(object sender, string propertyName)
 {
   if (this.PropertyChanged != null)
     PropertyChanged(sender, new PropertyChangedEventArgs(propertyName));
 }

调试时,propertychanged始终为null。我真的迷失了如何更新列表框。

列表框的xaml如下所示:

<DataTemplate x:Key="PlayerTemplate">
  <WrapPanel>
      <Grid >
        <Grid.ColumnDefinitions x:Uid="5">
          <ColumnDefinition  Width="Auto"/>
          <ColumnDefinition  Width="*"/>
          </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
          <RowDefinition Height="50"/>
          </Grid.RowDefinitions>

        <TextBlock VerticalAlignment="Center" Margin="5" Grid.Column="0" Text="{Binding Path=ID}" FontSize="22" FontWeight="Bold"/>                
      </Grid>                                  
    </WrapPanel>

1 个答案:

答案 0 :(得分:1)

sample没有名为"ID"的属性,因为sample是您的集合,而不是您的Player实例。此外,由于您正在完全替换该集合,因此使用可观察的集合是没有意义的。试试这个:

private ICollection<Player> players = new List<Player>();

public ICollection<Player> Players
{
    get { return this.players; }
    private set
    {
        this.players = value;

        // the collection instance itself has changed (along with the players in it), so we just need to invalidate this property
        this.OnPropertyChanged(this, "Players");
    }
}