2013-10-15 175 views
1

我正在開發Windows商店應用程序。C#商店應用程序:更新ListView

class User 
{ 
    public string Login { get; set; } 
    public string Name { get; set; } 
    public string Enabled { get; set; } 

    public User(string Login) 
    { 
     this.Login = Login; 
     this.Load(); 
    } 

    async public Task Load() 
    { 
     HttpResponseMessage response = await App.http.GetAsync("https://example.com/user?login=" + Login); 
     var xml = XDocument.Parse(await response.Content.ReadAsStringAsync()); 
     var user = (from entry in xml.Descendants("user") 
         select new 
         { 
          Name  = (string)entry.Element("name"), 
          Enabled = (string)entry.Element("enabled") 
         }).First(); 
     this.Name = user.Name; 
     this.Enabled = user.Enabled; 
    } 
} 

描述用戶和負荷的所有數據異步地從服務器。我也有MainPage.xaml中與後面的下面的代碼:

public sealed partial class MainPage : Mail.Common.LayoutAwarePage 
{   
    ObservableCollection<User> Users = new ObservableCollection<User>(); 

    public MainPage() 
    { 
     this.InitializeComponent();    
     itemListView.ItemsSource = Users; 
    } 

    private async void pageRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
     HttpResponseMessage response = await App.http.GetAsync("https://example.com/listusers"); 
     var xml = XDocument.Parse(await response.Content.ReadAsStringAsync()); 
     foreach (var item in from entry in xml.Descendants("email") 
          select new 
          { 
           Login = (string)entry.Element("name") 
          }) 
     { 
      Users.Add(new User(item.Login)); 
     } 
    } 
} 

MainPageListView是diplays ObservableCollection<User> Users。 (我有如下的DataTemplate:

 <DataTemplate x:Key="UserTemplate"> 
     <StackPanel Orientation="Horizontal" Width="470" Height="85"> 
      <Border Height="40" Width="40" Margin="10,10,0,10" VerticalAlignment="Top"> 
       <Image Source="/SampleImage.png" Stretch="UniformToFill"/> 
      </Border> 
      <StackPanel Orientation="Vertical" VerticalAlignment="Top" Margin="0,10,0,0"> 
       <TextBlock Text="{Binding Login}" FontSize="20" FontWeight="Semilight" 
        Margin="10,0,0,0" Width="320" Height="26" TextTrimming="WordEllipsis" 
        HorizontalAlignment="Left" VerticalAlignment="Top"/> 
       <TextBlock Text="{Binding Name}" 
        Margin="10,2,0,0" Width="320" TextTrimming="WordEllipsis" TextWrapping="Wrap" 
        HorizontalAlignment="Left"/> 
      </StackPanel> 
      <TextBlock Text="{Binding Enabled}" FontSize="16" Margin="20,0,0,0" VerticalAlignment="Center"/> 
     </StackPanel> 
    </DataTemplate> 

)。

不幸的是,我只看到列表中的初始數據(登錄)。在構造函數(name,enabled)中異步接收的所有其他數據在listview(我確信它已正確加載)中未顯示。

如何讓ListView顯示Users集合中物體的實際狀態?或者我應該執行同步請求(如何?)

+3

你'User'類必須實現'INotifyPropertyChanged'並適當提高屬性更改通知。 –

+0

你能舉個例子嗎? – simon

+0

@HighCore好的,這工作,謝謝!您可以將其作爲答案發布,我會將其標記爲解決方案。 – simon

回答

1

您的用戶類必須實現INotifyPropertyChanged並正確引發屬性更改通知。

- HighCore

(這個問題需要一個答案,應作適當標記爲 「回答」。)

相關問題