Событие PropertyChanged не запускается - PullRequest
0 голосов
/ 23 декабря 2011

Я реализую пейджинг для DataGrid, используя ObservableCollection<>.Первый раз он правильно отображает 10 записей.При нажатии на кнопку Next вторая страница не отображается.Когда я отлаживал, я обнаружил, что событие PropertyChanged не запускается, когда я устанавливаю currentpagenumber.

Мой код

   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.в привязке как

    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. Я не знаю, почему не происходит изменение события без изменений.

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

1 Ответ

4 голосов
/ 23 декабря 2011

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

...