MVVM:我应该将文本框直接绑定到模型还是应该首先创建完整属性?

时间:2019-01-04 03:07:20

标签: wpf mvvm data-binding caliburn.micro

所以我有一个像这样的文本框:

<TextBox x:Name="FirstName" Width="100" />

我有一个这样的模型:

public class Person
{
    public string FirstName { get; set; }
}

我的视图模型应该是这样的吗?

private Person _person;

public string FirstName
{
    get => _person.FirstName;
    set => _person.FirstName = value;
}

private string _firstName;
public string FirstName
{
    get { return _firstName; }
    set
    {
         _firstName = value;
         NotifyOfPropertyChange(FirstName);
    }
}

然后稍后再创建人员对象?

2 个答案:

答案 0 :(得分:0)

以这种方式进行操作,则无需关心Person对象的创建。

private Person _person;
public string FirstName
{
    get => _person.FirstName;
    set
    {
        _person.FirstName = value;
        NotifyOfPropertyChange(nameof(FirstName));
    }
}

答案 1 :(得分:0)

至少有一个很好的理由,您不应将视图模型属性绑定到模型。视图模型属性绑定到用户关心的任何输入,就您的模型而言,该输入可能是有效输入,也可能不是有效输入。如果您在执行操作时有效地使用模型,则必须确保能够将模型置于潜在的无效状态。这是我不愿做的事情。视图模型在那里接收用户的输入。尽管您可以通过为输入控件指定有效状态来确保视图模型状态始终有效(例如,在这种情况下名称不得超过100个字符),但可能存在无效输入,您无法阻止用户输入通过在输入控件中排除输入。然后,这些状态将需要由视图模型本身处理。

虽然在视图模型和模型之间执行的工作量重复很多,但可能会很痛苦。