1.新建用户控件如:Pagination
xmal:
<StackPanel Name="paginationPanel" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,20,20,0" Height="40" Visibility="Hidden">
<TextBlock Style="{StaticResource pageText}">
<Run Text="共" />
<Run Name="pageTotalTxt" />
<Run Text="页" />
</TextBlock>
<TextBlock Style="{StaticResource pageText}">
<Run Name="recordTotalTxt" />
<Run Text="条记录" />
</TextBlock>
<TextBlock Style="{StaticResource pageText}">
<Run Text="当前第" />
<Run Name="currentPageTxt" />
<Run Text="页" />
</TextBlock>
<Button Content="首 页" Name="firstPageTxt" Style="{StaticResource pageBtn}" Click="FirstPageTxtClick" />
<Button Content="上一页" Name="prevPageTxt" Style="{StaticResource pageBtn}" Click="PrevPageTxtClick" />
<Button Content="下一页" Name="nextPageTxt" Style="{StaticResource pageBtn}" Click="NextPageTxtClick" />
<Button Content="尾 页" Name="lastPageTxt" Style="{StaticResource pageBtn}" Click="LastPageTxtClick" />
</StackPanel>
对应的cs
public partial class Pagination : UserControl
{
public Pagination()
{
InitializeComponent();
}
/// <summary>
/// 总页数
/// </summary>
public int TotalPage
{
get { return Convert.ToInt32(GetValue(TotalPageProperty)); }
set { SetValue(TotalPageProperty, value); }
}
/// <summary>
/// 总记录数
/// </summary>
public int TotalRecord
{
get { return Convert.ToInt32(GetValue(TotalRecordProperty)); }
set { SetValue(TotalRecordProperty, value); }
}
/// <summary>
/// 当前页
/// </summary>
public int CurrentPage
{
get { return Convert.ToInt32(GetValue(CurrentPageProperty)); }
set { SetValue(CurrentPageProperty, value); }
}
/// <summary>
/// 首页按钮
/// </summary>
public event RoutedEventHandler FirstPage
{
add { AddHandler(FirstPageEvent, value); }
remove { RemoveHandler(FirstPageEvent, value); }
}
/// <summary>
/// 上一页按钮
/// </summary>
public event RoutedEventHandler PrevPage
{
add { AddHandler(PrevPageEvent, value); }
remove { RemoveHandler(PrevPageEvent, value); }
}
/// <summary>
/// 下一页按钮
/// </summary>
public event RoutedEventHandler NextPage
{
add { AddHandler(NextPageEvent, value); }
remove { RemoveHandler(NextPageEvent, value); }
}
/// <summary>
/// 尾页按钮
/// </summary>
public event RoutedEventHandler LastPage
{
add { AddHandler(LastPageEvent, value); }
remove { RemoveHandler(LastPageEvent, value); }
}
private static readonly DependencyProperty TotalPageProperty =
DependencyProperty.Register("TotalPage",
typeof(int),
typeof(Pagination),
new PropertyMetadata(new PropertyChangedCallback(TotalPageCallback))
);
private static void TotalPageCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Pagination pagin = d as Pagination;
int totalPage = Convert.ToInt32(e.NewValue);
if (totalPage > 1)
{
pagin.paginationPanel.Visibility = Visibility.Visible;
pagin.pageTotalTxt.Text = totalPage.ToString();
}
}
private static readonly DependencyProperty TotalRecordProperty =
DependencyProperty.Register("TotalRecord",
typeof(int),
typeof(Pagination),
new PropertyMetadata(new PropertyChangedCallback(TotalRecordCallback))
);
private static void TotalRecordCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Pagination pagin = d as Pagination;
pagin.recordTotalTxt.Text = e.NewValue.ToString();
}
private static readonly DependencyProperty CurrentPageProperty =
DependencyProperty.Register("CurrentPage",
typeof(int),
typeof(Pagination),
new PropertyMetadata(new PropertyChangedCallback(CurrentPageCallback))
);
private static void CurrentPageCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Pagination pagin = d as Pagination;
pagin.currentPageTxt.Text = e.NewValue.ToString();
}
private static RoutedEvent FirstPageEvent =
EventManager.RegisterRoutedEvent("FirstPage",
RoutingStrategy.Direct,
typeof(RoutedEventHandler),
typeof(Pagination)
);
private static RoutedEvent PrevPageEvent =
EventManager.RegisterRoutedEvent("PrevPage",
RoutingStrategy.Direct,
typeof(RoutedEventHandler),
typeof(Pagination)
);
private static RoutedEvent NextPageEvent =
EventManager.RegisterRoutedEvent("NextPage",
RoutingStrategy.Direct,
typeof(RoutedEventHandler),
typeof(Pagination)
);
private static RoutedEvent LastPageEvent =
EventManager.RegisterRoutedEvent("LastPage",
RoutingStrategy.Direct,
typeof(RoutedEventHandler),
typeof(Pagination)
);
private void FirstPageTxtClick(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(FirstPageEvent, this));
}
private void PrevPageTxtClick(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(PrevPageEvent, this));
}
private void NextPageTxtClick(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(NextPageEvent, this));
}
private void LastPageTxtClick(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(LastPageEvent, this));
}
}
最终样子
在要使用的页面
<local:Pagination x:Name="pagination" FirstPage="PaginationFirstPage" PrevPage="PaginationPrevPage" NextPage="PaginationNextPage" LastPage="PaginationLastPage"></local:Pagination>
对应cs
private int _currentPage = 1;
private int _totalPage = 0;
private int _totalRecord = 0;
public FeedbackList()
{
InitializeComponent();
GetPagionation();
GetFeedbackList();
}
private void GetPagionation()
{
FeedbackViewModel feedbackModel = new FeedbackViewModel();
this._totalRecord = feedbackModel.GetFeedbackCount();
this._totalPage = FunctionHelper.GetTotalPage(this._totalRecord);
this.pagination.TotalPage = this._totalPage;
this.pagination.TotalRecord = this._totalRecord;
this.pagination.CurrentPage = this._currentPage;
}
public void GetFeedbackList()
{
FeedbackViewModel feedbackModel = new FeedbackViewModel();
this.feedbackList.ItemsSource = feedbackModel.GetFeedbackPagination(this._currentPage).DefaultView;
}
private void FeedbackDeleteClick(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
if (btn != null)
{
long id = Convert.ToInt64(btn.Tag);
FeedbackViewModel feedbackModel = new FeedbackViewModel();
feedbackModel.DeleteFeedback(id);
MessageBox.Show("删除成功");
this.feedbackList.ItemsSource = feedbackModel.GetFeedback().DefaultView;
}
}
private void PaginationFirstPage(object sender, RoutedEventArgs e)
{
this._currentPage = 1;
this.pagination.CurrentPage = this._currentPage;
GetFeedbackList();
}
private void PaginationPrevPage(object sender, RoutedEventArgs e)
{
if(this._currentPage > 1)
{
this._currentPage -= 1;
this.pagination.CurrentPage = this._currentPage;
GetFeedbackList();
}
}
private void PaginationNextPage(object sender, RoutedEventArgs e)
{
if(this._currentPage < this._totalPage)
{
this._currentPage += 1;
this.pagination.CurrentPage = this._currentPage;
GetFeedbackList();
}
}
private void PaginationLastPage(object sender, RoutedEventArgs e)
{
this._currentPage = this._totalPage;
this.pagination.CurrentPage = this._currentPage;
GetFeedbackList();
}