2011-12-23 140 views
0

我正在使用ObservableCollection<>爲DataGrid實現分頁。 第一次正確顯示10條記錄。當點擊Next按鈕時,它沒有顯示第二頁。當我調試時,我發現當我設置currentpagenumber時,PropertyChanged事件不會觸發。PropertyChanged事件沒有觸發

我的代碼是

ObservableCollection<RiskSettings> riskCollection = new ObservableCollection<RiskSettings>(); 
    private ObservableCollection<ObservableCollection<RiskSettings>> Pages; 
    private ObservableCollection<RiskSettings> _ItemsSource; 
    private ObservableCollection<RiskSettings> _CurrentPage; 
    public RiskAlert() 
    { 
     InitializeComponent(); 
     GeneratePages(); 
    } 
    private void GeneratePages() 
    { 
     if (riskCollection.Count > 0) 
     { 
      PageCount = (int)Math.Ceiling(riskCollection.Count/(double)ItemsPerPage); 
      Pages = new ObservableCollection<ObservableCollection<RiskSettings>>(); 
      for (int i = 0; i < PageCount; i++) 
      { 
       ObservableCollection<RiskSettings> page = new ObservableCollection<RiskSettings>(); 
       for (int j = 0; j < ItemsPerPage; j++) 
       { 
        if (i * ItemsPerPage + j > riskCollection.Count - 1) break; 
        page.Add(riskCollection[i * ItemsPerPage + j]); 
       } 
       Pages.Add(page); 
      } 
      this.CurrentPage = Pages[0]; 
      this.CurrentPageNumber = 1; 
     } 
    } 

    public int CurrentPageNumber 
    { 
     get { return _CurrentPageNumber; } 
     set 
     { 
      _CurrentPageNumber = value; 
      //if (PropertyChanged != null) 
       this.OnPropertyChanged(new PropertyChangedEventArgs("CurrentPageNumber")); 
     } 
    } 
public ObservableCollection<RiskSettings> Collection 
    { 
     get 
     { 
      return riskCollection; 
     } 
     set 
     { 
      riskCollection = value; 
      GeneratePages(); 
     } 
    } 
public ObservableCollection<RiskSettings> CurrentPage 
    { 
     get { return _CurrentPage; } 
     set 
     { 
      _CurrentPage = value; 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs("CurrentPage")); 
     } 
    } 

    public int CurrentPageNumber 
    { 
     get { return _CurrentPageNumber; } 
     set 
     { 
      _CurrentPageNumber = value; 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs("CurrentPageNumber")); 
     } 
    } 

    public int ItemsPerPage 
    { 
     get { return (int)GetValue(ItemsPerPageProperty); } 
     set { SetValue(ItemsPerPageProperty, value); } 
    } 
    public static readonly DependencyProperty ItemsPerPageProperty = DependencyProperty.Register("ItemsPerPage", typeof(int), typeof(RiskAlert), new UIPropertyMetadata(20)); 

    #region INotifyPropertyChanged Members 
    public event PropertyChangedEventHandler PropertyChanged; 
    #endregion 

我收集的所有數據在數據網格riskCollection.My Name是grdRiskAlerts 我綁定的

GeneratePages(); 
      this.ItemsSource = riskCollection; 
      grdRiskAlerts.ItemsSource = CurrentPage; 
      txtTotalRecs.Text = "Total : " + riskCollection.Count(); 
      //txtDispRecs.Text = CurrentPage.Count().ToString(); 
      txtNumOfPages.Text = this.CurrentPageNumber.ToString(); 
      totalRecords = riskCollection.Count(); 
      if (pageSize <= totalRecords) 
      { 
       if (totalRecords > 0) 
        txtDispRecs.Text = "Displaying 1 to " + CurrentPage.Count(); 
       else 
        txtDispRecs.Text = "Displaying 0 to " + CurrentPage.Count(); 
      } 

對於這個頁面的東西我也跟着從谷歌 我做的一個例子不知道爲什麼propertychanged事件沒有解僱。

任何人都可以幫忙嗎?

Ramki。

+1

該粘貼不包含任何XAML,因此我們看不到您的綁定。您應該在您的問題中插入**相關的**代碼位,以便人們可以立即查看它們而無需轉到其他網站。 – slugster 2011-12-23 05:17:20

+0

我是這個論壇的新手。我在我的鏈接中刪除了不需要的代碼[http://pastebin.com/twLjQ28Q] – user768853 2011-12-23 05:33:06

+1

第二個粘貼爲空。你不會讓人們很容易幫助你...使用你問題下的編輯按鈕將代碼直接包含到你的問題中。 – slugster 2011-12-23 05:44:56

回答

4

明確的問題是您直接設置值而不是更新綁定源。看看你是否將某個源綁定到屬性,然後手動更改該屬性,然後打破綁定,這就是爲什麼屬性更改不會觸發。

+0

+1,將'CurrentPage'屬性直接指定給'grid.ItemsSource'屬性**不會創建綁定** - 添加到集合的項目將顯示,但更改整個CurrentPage屬性不會顯示在網格中。 – slugster 2011-12-23 22:48:34