Model Automapper在MVVM应用程序中的使用
我正在构建一个MVVM应用程序。模型/实体(我正在使用NHibernate)已经完成,我正在考虑使用AutoMapper在ViewModel和model之间进行映射 然而,这一条款把我吓坏了:(来自) AutoMapper为每个类型映射(源/目标对)强制执行该操作, 目标类型上的所有属性都与匹配 关于源类型的一些问题 对我来说,合乎逻辑的选择是从一个模型映射到另一个viewmodel(我将让viewmodel手动指定给model),但引用基本上扼杀了这一想法,因为viewmodel肯定具有模型上不存在的属性 您是如何在MVVM应用程序中使用Automapper的?请帮忙 当它说“映射”时,并不意味着它是1:1映射,它只是意味着需要考虑所有属性。要么Automapper可以根据约定找出它,要么显式地映射它们,要么显式地告诉它一个给定的属性 下面是文档中的示例。正如您所看到的,属性在某种意义上是被映射的,但Automapper知道忽略它Model Automapper在MVVM应用程序中的使用,model,automapper,mvvm,Model,Automapper,Mvvm,我正在构建一个MVVM应用程序。模型/实体(我正在使用NHibernate)已经完成,我正在考虑使用AutoMapper在ViewModel和model之间进行映射 然而,这一条款把我吓坏了:(来自) AutoMapper为每个类型映射(源/目标对)强制执行该操作, 目标类型上的所有属性都与匹配 关于源类型的一些问题 对我来说,合乎逻辑的选择是从一个模型映射到另一个viewmodel(我将让viewmodel手动指定给model),但引用基本上扼杀了这一想法,因为viewmodel肯定具有模型上
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.SomeValuefff, opt => opt.Ignore());
Mapper.CreateMap()
.ForMember(dest=>dest.SomeValuefff,opt=>opt.Ignore());
您可以使用进行调查。Polymod代理本质上是包装nhibernate对象的视图模型。通过它的公式功能,您可以添加自更新属性,例如IsComboVisible=(domainobject.A+domainobject.B>10)我想知道是否有人尝试过这样做:
public bool SetMappedProperty<TC,TV>(ref TC cont, TV value, [CallerMemberName] string propertyName = null)
{
var prop = cont.GetType().GetProperty(propertyName);
var old = prop.GetValue(cont, null);
if (Equals(old, value)) { return false; }
prop.SetValue(cont, value);
RaisePropertyChanged(propertyName);
return true;
}
public override MyType MyProperty
{
get { return _myData.MyProperty; }
set { SetMappedProperty( ref _myData, value); }
}
有价值的被动扩展也会有所帮助 这很有帮助。这是否也适用于源属性?我希望能够将新属性添加到源,并且只添加到源,而不必担心破坏目标(viewmodel)。任何位于源上但不位于目标上的属性都将被自动忽略。我喜欢Automapper,但在MVVM场景中,“默认忽略”似乎更好。我认为团队会因为总是显式地忽略新属性而感到恼火。使用ValueInjector,您根本不必创建映射,只需创建映射算法(值注入),请参见此处,您不必担心存在于一侧而不存在于另一侧的属性