2014-12-03 60 views
1

嗨,我有observablecollection,我從服務器獲取數據,當它結束時,我想在我的頁面刷新列表。數據即將到來,但我不能在屏幕上看到它,我找不到我的錯誤。我實施INotifypropertychanged埠我認爲它不太好。當我把斷點我看到PropertyChanged事件每次都是空的。用戶界面不會改變後可觀察的收集更改

我班

public class Ulke:INotifyPropertyChanged 
{ 
    private int _ulkeID; 
    public int UlkeID 
    { 
     get { return _ulkeID; } 
     set { _ulkeID = value; NotifyPropertyChanged(); } 
    } 

    private string _adi; 
    public string Adi 
    { 
     get { return _adi; } 
     set { _adi = value; NotifyPropertyChanged(); } 
    } 

    public string DiyanetID { get; set; } 
    public bool EyaletVarmi { get; set; } 

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

UlkeRepository類

public class UlkeRepository : INotifyPropertyChanged 
{ 
    public UlkeRepository() 
    { 
     _ulkeler = new ObservableCollection<Ulke>(); 
     ulkeler.Add(new Ulke { UlkeID = 3, EyaletVarmi = true, DiyanetID = "3", Adi = "Moliba" }); 
     ulkeler.Add(new Ulke { UlkeID = 5, EyaletVarmi = true, DiyanetID = "3", Adi = "As" }); 
    } 

    private ObservableCollection<Ulke> _ulkeler; 
    public ObservableCollection<Ulke> ulkeler 
    { 
      get { return _ulkeler; } 
      set { _ulkeler = value; NotifyPropertyChanged(); } 
    } 

    public async Task UlkeGetir() 
    { 
     JsonDownloader js = new JsonDownloader(); 
     var result = await js.GetDataFromUrl<Ulke>("http://www.example.com/A/UlkeGetir"); 
     ulkeler = result; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

} 

MyPageLoaded代碼

this.DataContext = ulke.ulkeler; 
    liste.DataContext = ulke.ulkeler;   
    ulke.UlkeGetir(); 

XAML代碼

<ListBox x:Name="liste" 
     ItemsSource="{Binding Mode=TwoWay}" SelectionChanged="liste_SelectionChanged"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Adi}"/> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
</ListBox> 
+0

先嚐試implementating的靜態列表。然後從那裏調試。一步一步來。 – 2014-12-03 02:30:22

+0

我嘗試但沒有改變 – user1924375 2014-12-03 12:37:47

+0

有了靜態列表,doe列表框實際上顯示列表嗎? – 2014-12-03 12:44:57

回答

1

更新後的解決方案後,看看源:

一切正常,你只需要注意編譯器的警告。

HubPage.xaml.cs

功能UlkeYukle更新(你忘了等待)

UlkeRepository ulke; 
private async void UlkeYukle() 
{ 
    ulke = new UlkeRepository();   
    await ulke.UlkeGetir();   // you forgot this  
} 


// this is a function to test your OnPropertyChange 
private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    ulke.ulkeler.Insert(0, new Ulke { UlkeID = 5, EyaletVarmi = true, DiyanetID = "3", Adi = "A_TEST" }); // inssert at top 
    ulke.ulkeler[0].Adi = "Changing Title Again"; 
} 

調試目的,我添加了一個按鈕模板(這樣我們可以測試它後更新事實)

HubPage.xaml

<HubSection x:Uid="HubSection1" x:Name="hub1" Header="SECTION 1" DataContext="{Binding Mode=TwoWay}" HeaderTemplate="{ThemeResource HubSectionHeaderTemplate}"> 
    <DataTemplate> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="80*"/> 
       <RowDefinition Height="20*"/> 
      </Grid.RowDefinitions> 
      <ListView 
      ItemsSource="{Binding Mode=TwoWay}" 
      IsItemClickEnabled="True" 
      ItemClick="GroupSection_ItemClick" 
      ContinuumNavigationTransitionInfo.ExitElementContainer="True"> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Margin="0,0,0,27.5"> 
          <TextBlock Text="{Binding Adi}" Style="{ThemeResource ListViewItemTextBlockStyle}" /> 
         </StackPanel> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
      <Button Click="Button_Click" Grid.Row="1"></Button> 
     </Grid> 
    </DataTemplate> 
</HubSection> 

enter image description here

+0

[CallerMemberName]在wp.i中工作,可以在調試中看到屬性名稱 – user1924375 2014-12-03 13:09:19

+0

@ user1924375然後我沒有看到問題,可能將ItemsSource直接設置爲代碼隱藏中的ObservableCollection會有所幫助。它看起來是正確的,你可以回購項目(zip文件,一個驅動器)? – 2014-12-03 13:13:29

+1

@ user1924375像我說過的,一切看起來都很好,你只是忘記了一個「等待」,我還添加了一個函數來檢查你的Property變化,只需點擊底部的按鈕,它就會更新列表。 – 2014-12-03 15:32:28