我正在尝试创建在表单底部有一组字段和页面按钮的数据表单。
我希望分页是一个单独的控件,带有第一个、上一个、下一个、最后一个标签
这种分页控制将用于任何数据输入形式,以允许用户在前一记录之间来回切换。例如,订单、发票、付款都是数据表单。用户选择"订单"时,将显示"新订单表单"。它还具有用于移动到上一条记录的分页按钮。
我创建了一个名为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
。