2011-12-23 3 views
0

Я реализую подкачку для DataGrid с помощью ObservableCollection<>. Впервые он правильно отображает 10 записей. При нажатии на кнопку Next она не отображает вторую страницу. Когда я отлаживаю, я обнаружил, что событие PropertyChanged не срабатывает, когда я устанавливаю currentpagenumber.Событие 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 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(); 
      } 

Для этого пейджинговой материала я следуют один пример из Google я не знаю, почему событие changechanged не стреляет.

Может ли кто-нибудь помочь в этом?

Ramki.

+1

Эта паста не содержит XAML, поэтому мы не можем видеть ваши привязки. Вы должны вставить ** соответствующие ** биты кода в свой вопрос, чтобы люди могли сразу их просматривать, не переходя на другой сайт. – slugster

+0

Я новичок в этом форуме. Я удалил ненужный код в моей ссылке [http://pastebin.com/twLjQ28Q] – user768853

+1

Эта вторая паста пуста. Вы не облегчаете людям помощь ... используйте кнопку редактирования под своим вопросом, чтобы включить код непосредственно в свой вопрос. – slugster

ответ

4

Сложная проблема заключается в том, что вы устанавливаете значение напрямую, а не обновляете источник привязки. Посмотрите, если вы привязываете какой-то источник к свойству, а затем вручную изменяете это свойство, вы нарушаете привязку, и поэтому изменение свойства не срабатывает.

+0

+1, Присвоение свойству CurrentPage прямо к свойству 'grid.ItemsSource' ** не создает привязки ** - элементы, добавленные в коллекцию, будут отображаться, но изменение всего свойства' CurrentPage' не будет отображаться в сетке. – slugster

Смежные вопросы