我正在尝试创建在表单底部具有一组字段和分页按钮的数据表单。
我希望分页成为一个单独的控件,其中包含第一个、上一个、下一个、最后一个,并带有标签第 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。
但想清除第一个障碍。任何帮助表示赞赏。
您无法将
List<Order>
转换为 List<object>
- 这就是您收到此错误的原因。
如果您的
DataPager
控件只需要控制显示哪个页面,而不是实际修改集合,您可以简单地将 Items
属性定义为 IEnumerable
类型而不是 List<object>
类型,那么问题将是解决了。
这是因为对于任何
T
,List<T>
都可以转换为 IEnumerable
。