2011-12-23 134 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