我正在尝试创建数据表单,其中包含表单底部的字段和分页按钮。
我希望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。
但是想要清除第一道障碍。任何帮助表示赞赏。
答案 0 :(得分:1)
您无法将List<Order>
投射到List<object>
- 这就是您收到此错误的原因。
如果您的DataPager
控件只需要控制显示哪个页面,而不是实际修改集合,则只需将Items
属性定义为IEnumerable
类型而不是{ {1}},这个问题将得到解决。
这是因为对于任何List<object>
,T
都可投放到List<T>
。