WPF 数据表单分页

问题描述 投票:0回答:1

我正在尝试创建在表单底部具有一组字段和分页按钮的数据表单。

我希望分页成为一个单独的控件,其中包含第一个、上一个、下一个、最后一个,并带有标签第 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。

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

c# .net wpf pagination datapager
1个回答
1
投票

您无法将

List<Order>
转换为
List<object>
- 这就是您收到此错误的原因。

如果您的

DataPager
控件只需要控制显示哪个页面,而不是实际修改集合,您可以简单地将
Items
属性定义为
IEnumerable
类型而不是
List<object>
类型,那么问题将是解决了。

这是因为对于任何

T
List<T>
都可以转换为
IEnumerable

© www.soinside.com 2019 - 2024. All rights reserved.