WPF数据表格分页

时间:2013-02-07 22:39:33

标签: c# .net wpf paging datapager

我正在尝试创建数据表单,其中包含表单底部的字段和分页按钮。

我希望Paging是一个单独的控件,包括First,Previous,Next,Last,标签第1项为n。

此分页控件将使用任何数据输入表单,以允许用户在先前记录之间来回切换。例如,订单,发票,付款是数据表格。用户在选择订单时会显示新订单。它还有用于移动到上一条记录的分页按钮。

我创建了一个名为DataPager的UserControl,其依赖属性为PagingItems。我希望这个依赖属性是通用的,这样我就可以传递一个项目列表(订单,发票,付款)

为此,我做了:在用户控件中列出。我尝试以需要分页的形式绑定它。

public List<object> Items
{
    get { return (List<object>)GetValue(ItemsProperty); }
    set { SetValue(ItemsProperty, value); }
}

// Using a DependencyProperty as the backing store for Items.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty ItemsProperty =
        DependencyProperty.Register("Items", typeof(List<object>), typeof(DataPager), new UIPropertyMetadata(null, LoadItems));

private static void LoadItems(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
    DataPager thisControl = (DataPager)obj;
    thisControl.RefreshItems();
}

我在使用控件和绑定的页面中收到以下错误:

System.Windows.Data Error: 1 : Cannot create default converter to perform 'one-way' conversions between types 'System.Collections.Generic.List`1[PagingSample.Order]' and 'System.Collections.Generic.List`1[System.Object]'. Consider using Converter property of Binding. BindingExpression:Path=Orders; DataItem='MainViewModel' (HashCode=26754911); target element is 'DataPager' (Name='dataPager1'); target property is 'Items' (type 'List`1')

System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='System.Collections.Generic.List`1[PagingSample.Order]' BindingExpression:Path=Orders; DataItem='MainViewModel' (HashCode=26754911); target element is 'DataPager' (Name='dataPager1'); target property is 'Items' (type 'List`1')

不确定如何将DataPager控件项属性保持为通用。我还没想出如何告诉父控件显示CurrentItem。

但是想要清除第一道障碍。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您无法将List<Order>投射到List<object> - 这就是您收到此错误的原因。

如果您的DataPager控件只需要控制显示哪个页面,而不是实际修改集合,则只需将Items属性定义为IEnumerable类型而不是{ {1}},这个问题将得到解决。

这是因为对于任何List<object>T都可投放到List<T>