2011-12-23 25 views
0

ObservableCollection<>を使用してDataGridのページングを実装しています。 初めて10個のレコードが正しく表示されます。 Nextボタンをクリックすると、2番目のページが表示されませんでした。デバッグすると、currentpagenumberを設定すると、PropertyChangedイベントが発生していないことがわかりました。PropertyChangedイベントが発生しない

私のコードは、私がriskCollection.My DataGridの名前のすべてのデータが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(); 
      } 

としてバインドさ収集

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 

ですなぜpropertychangedイベントが発砲していないのか分からない

これについてお手伝いできますか?

Ramki。

+1

そのペーストにはXAMLが含まれていないため、バインディングは表示されません。 **関連する**ビットのコードを質問に挿入して、別のサイトに行かなくてもすぐに閲覧できるようにしてください。 – slugster

+0

私はこのフォーラムには初めてです。私のリンク[不要なコードを削除しました[http://pastebin.com/twLjQ28Q] – user768853

+1

その2番目のペーストは空です。人々があなたを助けてくれるのは簡単ではありません...質問の下にある編集ボタンを使用して、質問に直接コードを含めるようにしてください。 – slugster

答えて

4

明らかな問題は、バインディングソースを更新するのではなく、直接値を設定していることです。あなたがプロパティにいくつかのソースをバインドしてから、そのプロパティを手動で変更するかどうかを見てください。そうすれば、バインディングが中断され、プロパティが変更されない理由が発生します。

+0

+1、 'CurrentPage'プロパティを' grid.ItemsSource'プロパティに直接割り当てると**バインディングは作成されません** - コレクションに追加されたアイテムは表示されますが、 'CurrentPage'プロパティ全体を変更すると表示されませんグリッド内で – slugster

関連する問題