我可以将对象强制转换为接口或新类

时间:2012-01-06 17:18:58

标签: c# object casting dependency-properties

我有一个silverlight应用程序 在应用程序中,有许多用户控件,其中包含与采购订单,销售订单,转移等相关的数据网格。

这些共同点是"文件类型","文件编号"类型结构。

我正在尝试实现一个通用的priting函数,我获得Order然后将它发送回HOST erp系统以创建一个PDF供查看。

我试图避免为所有屏幕添加相同的功能,因此我创建了一个打印报告用户控件,上面有一个打印按钮。用户控件后面有一个View模型,上面有一些依赖属性。

我们的想法是,当用户从其中一个网格中选择一个订单时,我们将依赖支柱设置为网格中的选定项目。为了适应这种情况,依赖属性属于object。

当设置dependcy属性时,我可以在DP的regstration中定义的回调方法中查找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;

    }
}

我可以推送这个属性,因为我可以将它传递给视图模型上的方法,但在任何时候我都不能用它做任何事情。

一位同事建议,为了使事情更清洁,或者在销售订单中添加一个界面,转移ORder,Purcashe ORder类将使我能够将对象转换为接口或其他一些共享类"通过在接口e..g

上调用方法
public NewPrintObj GetNewObject()
{
    PrintObj p = new PrintObj;
    p.No=1;
    p,type=2;
}

这似乎是一个相当不错的主意,但我无法将dependcy Property对象转换/转换为其他任何内容。

如果我施放我得到无效的施法异常,如果我安全施放,那么我得到一个空。

1 个答案:

答案 0 :(得分:0)

我不完全确定我理解对象是如何相关的(所有订单都来自PrintObjModel?)

我的答案是在依赖项属性更改事件中放置一个断点并查看e.NewValue的内容。然后,这将允许您查看您拥有的内容以及是否可以转换为PrintObjModel

e.NewValue中的值不是您所期望的,或者您期望的东西不是来自您的想法。