我有一个用于我的MVP的BaseView - PRISM WPF应用程序。现在出于某种原因,我们考虑将_presenter作为BaseView中的模板化字段。
之前我将xaml表示视为
<base:BaseView xamlns:base="clr address of the dll which had BaseView" >
</base:BaseView>
现在因为我已将BaseView
更改为BaseView<TPresenter>,
那么我该如何编写Xaml呢?
答案 0 :(得分:8)
您可以在.NET 4 Framework
和XAML 2009之后执行此操作。
请参阅MSDN上的Generics in XAML
例如:
<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>
对于.NET 3.5:
对于专门针对WPF的XAML 2006用法,x:Class也必须使用 在与x:TypeArguments相同的元素上提供,以及该元素 必须是XAML文档中的根元素。根元素必须映射 到具有至少一个类型参数的泛型类型。一个例子是 的PageFunction。
支持通用用法的可能解决方法包括定义a 自定义标记扩展,可以返回泛型类型,或提供 包装从泛型类型派生的类定义 在其自己的类定义中展平泛型约束。
答案 1 :(得分:0)
万一有人遇到这种情况。我有一个类似的场景,我将基类转换为模板类(即 BaseView 到 BaseView)。我一直在 InitializeComponent() 方法中收到错误。我在 x:Class 基类型的 InitializeComponent() 调用中收到空异常错误。我能够通过从 XAML 定义中删除表单级事件来解决错误。如果我必须保留表单级事件,我需要将它们移动到 BaseView。