如何在XAML中指定泛型类型参数

时间:2011-09-27 18:07:57

标签: wpf xaml prism mvp

我有一个用于我的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呢?

2 个答案:

答案 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。