其他分享
首页 > 其他分享> > 我的ViewModel是否具有Model的属性和单个属性?

我的ViewModel是否具有Model的属性和单个属性?

作者:互联网

我有一个具有以下属性的模型:

public class Authorization : BindableBase
{                 
    public int id {get; set;}

    public string member {get; set;}

    public DateTime startDate {get; set;}
}

现在在我的视图模型上,我需要为视图具有相同的属性.

这是否意味着我还应该在我的模型的视图模型中拥有一个属性:

public Authorization auth {get; set;};

然后是“映射”方法来在View Model属性和Model属性的属性之间推/拉数据吗?

Caliburn.Micro似乎无法绑定到属性的属性,因此我看不到解决方法.

我在正确的轨道上吗,有没有更简单或更完善的方法?

解决方法:

您评论的方法:

Pull down my Model property, call method to assign values to ViewModel
properties, through binding make changes at UI that are reflected back
to ViewModel properties, on Save call method to assign ViewModel
properties back to the properties of the Model property and save to my
DB passing the Model property from my View Model

听起来很合理-但据我所知,CM可以绑定到属性的属性(失败时也可以显式绑定)

您只需要使用下划线_来分隔控件名称的绑定路径

例如

<Button x:Name="SomeObject_SomeProperty" />

现在,我从未尝试过,但是ViewModelBinder CM源代码中的这段代码似乎表明它可以工作:

var cleanName = element.Name.Trim('_');
var parts = cleanName.Split(new[] { '_' }, StringSplitOptions.RemoveEmptyEntries);

var property = viewModelType.GetPropertyCaseInsensitive(parts[0]);
var interpretedViewModelType = viewModelType;

for (int i = 1; i < parts.Length && property != null; i++) 
{
    interpretedViewModelType = property.PropertyType;
    property = interpretedViewModelType.GetPropertyCaseInsensitive(parts[i]);
}

...etc

如果确实需要手动映射,则AutoMapper是一个很好的库-您可以在映射中重塑数据的形状,这是将模型数据放入不一定能反映模型形状的ViewModel的好方法

标签:wpf,c,net,mvvm,caliburn-micro
来源: https://codeday.me/bug/20191123/2066746.html