作为基础的泛型类会导致XAML错误

时间:2014-12-30 09:56:15

标签: c# wpf

我有课程customerproduct。他们的相似之处在于班级Base Record。但是,Base Record中的类型始终取决于它是customer还是product。因此,我通常会Base Record创建。

只要customerproduct继承自Base Record,我的WPF项目就会出现XMAL错误。不幸的是,我不知道为什么会这样,为什么我在这里写;)

BaseRecord的标题:

public abstract class BaseRecord<T> : Notify where T : class, new()

客户标题:

public class Customer : BaseRecord<Data_Layer.Customer>

XAML错误:

   Unknown build error, 'Cannot resolve dependency to assembly 'Version=1.0.0.0,  Culture=neutral, PublicKeyToken=null' 
   because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on 
   demand through the ReflectionOnlyAssemblyResolve event.'

The tag 'CustomerAddWindow' does not exist in XML namespace 'clr-namespace:Business_Layer.Windows.Customer;assembly=Business_Layer'

如果我使课程BaseRecord不通用,一切都按我的意思运作。

在XAML中,我实例化

<local:Customer x:Key="CustomerViewModel "/>
新年快乐。

2 个答案:

答案 0 :(得分:1)

XAML不直接支持泛型。

有一些侧面项目旨在解决这个问题,但我总是选择与之共存。它实际上从未阻碍我的应用程序架构。

我相信它简单有效的解决方法是拥有一个解决泛型的中继承类。

例如,

public abstract class BaseRecord<T> : Notify where T : class, new()

public abstract class CustomerBase : BaseRecord<Data_Layer.Customer>

public class Customer : CustomerBase

我目前正在开发一个WPF应用程序,我的XAML中不需要任何泛型。

我在xaml代码隐藏中没有代码。实际上,由于某些自定义,我的基本窗口类具有与所有UI相关的代码。

如果您遵循MVVM架构,那么可能属于基本窗口属性的泛型应该很可能属于ViewModel类。

答案 1 :(得分:0)

我找到了错误并希望显示我的解决方案:

我已经添加了对我的WPF项目的引用,其中我的类是我在通用类中使用的。

我的架构是:

Business_Layer for business logic

Data_Layer从DB维护我的数据

Presentation_Layer as View。

我没有将Data_Layer引用到Presentation_Layer,因为没有必要。但是当你在WPF项目中使用泛型类时,你必须要WPF才能解决它。

这是第一个想要告诉的错误:

 Unknown build error, 'Cannot resolve dependency to assembly 'Version=1.0.0.0,  Culture=neutral, PublicKeyToken=null'because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.'

我不知道为什么但是在将这个data_layer引用添加到presentation_layer之后,我不需要解决方法类。我可以用

public class CustomerBase : BaseRecord<Data_Layer.Customer>

直接没有任何错误。