我在应用程序中有一个silverlight应用程序,其中有一些用户控件与数据网格在其中,如购买订单,销售订单,转移等相关的东西。
它们的共同点是“文档类型”、“文档编号”。类型结构。
我正在尝试实现一个通用的打印功能,通过该功能我可以获得订单,然后将其发送回主机erp系统以创建PDF以供查看。
我试图避免在所有屏幕上添加相同的功能,所以我创建了一个带有打印按钮的打印报表用户控件。用户控件背后有一个View模型以及它的一些依赖属性。
这个想法是,当用户从一个网格中选择一个订单时,我们将依赖属性设置为从网格中选择的项目。为了适应这种情况,依赖属性的类型是object。
当设置了依赖属性时,我可以在DP的regstration中定义的回调方法中pcik up the obejct。Iso e.value可以是销售订单、调拨订单、采购订单。
private static void UpdatedTheValues(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
var sender = d as NavReportPicker;
if (sender != null)
{
PrintObjModel bbb = (PrintObjModel) e.NewValue;
}
}我可以推送这个属性,因为我可以将它传递给视图模型上的一个方法,但在任何时候我都不能对它做任何其他事情。
一位同事建议,为了使事情变得更清晰,也许添加一个接口,通过调用接口上的方法,将对象强制转换为接口或其他“共享类”,例如,添加一个接口到Sale Order,transfer ORder,Purcashe ORder类。
public NewPrintObj GetNewObject()
{
PrintObj p = new PrintObj;
p.No=1;
p,type=2;
}这似乎是一个相当好的想法,但我无法将依赖属性对象转换/强制转换为任何其他对象。
如果我强制转换,我会得到无效的强制转换异常,如果我安全地强制转换,我会得到一个null。
发布于 2012-01-07 01:26:35
我不能完全确定我是否理解了所有对象是如何相关的(所有订单都是从PrintObjModel派生的吗?)
我的答案是在依赖属性更改事件中放置一个断点,并查看e.NewValue的内容。这将允许您查看您所拥有的内容,以及是否可以强制转换为PrintObjModel。
要么是e.NewValue中的值不是您期望的值,要么是您期望的值不是从您认为它所做的事情派生出来的。
https://stackoverflow.com/questions/8761735
复制相似问题