gpt4 book ai didi

c# - MVVM - 谁负责

转载 作者:太空宇宙 更新时间:2023-11-03 23:17:07 26 4
gpt4 key购买 nike

我现在有点困惑,因为我不确定“谁负责验证模型数据”之类的事情。

举个例子:

我有一个应用程序,在这个应用程序中,人与特定设备之间的关系被可视化。

public class Person{
public string Firstname {get; set;}
public string Lastname {get; set;}
public SomeSortOfDevice SomeSortOfDevice {get; set;}
}

public class SomeSortOfDevice{
public DateTime DeviceExpiration {get; set;}
public string DeviceSerialCode {get; set;}
//public bool IsSerialCodeValid{get{
// SomeValidationLogic()
//}
}

在应用程序 View 中,用户可以更改设备的数据。现在有一些规则 - 例如,DeviceExpiration 绑定(bind)到 TextBox,但只有在设置了有效的 SerialCode 时才应启用。

但是谁来决定 SerialCode 是否有效呢?模型本身? View 模型?模型是否应该包含一个额外的属性“IsSerialValid”,或者 TextBox 的 IsEnabled 属性如何绑定(bind)到该规则?

编辑 1

public class ViewModel{
public Person SelectedPerson {get; set;}
}

这就是我如何使用上面的模型 - View 将在 SeletedPerson 上获得一些绑定(bind)。

编辑2

我认为它比我之前解释的要复杂一点。假设设备是一个 token ,我想确定用户是否输入了一些东西 - 如果他输入了一些东西,它是否有效?

如果验证应该在模型中处理(正如我目前所了解的那样),模型将如下所示:

public Token{
public DateTime ExpirationDate {get; set;}
public string Serial {get; set;}
public bool IsTokenExpired{
get{
return ExpirationDate.Date < DateTime.Now;
}
}
public bool IsTokenValid{
get{
return new Regex("[0-9]{8,12}").Match().Success;
}
}
public bool IsTokenSet{
get{
return TokenSerial.Length > 0;
}
}
}

现在启用用户应在其中输入(或选择)日期的文本框,绑定(bind)如下所示:

<TextBox IsEnabled="{Binding SelectedPerson.Token.IsTokenValid}"/>

这工作得很好,但我对模型内部的验证规则并没有真正的感觉。

最佳答案

好吧,这只是一个意见,但我会这样做。

首先,你的模型应该有一个验证方法,比如public bool ValidateSerial(string serial);

然后,在您的 ViewModel 中,您将有一个绑定(bind)到 TextBox 的属性,您将在那里进行检查,例如:

_private string _serialNumber;
public string SerialNumber
{
get
{
return this._serialNumber;
}
set
{
this._serialNumber=value;
RaisePropertyChanged("SerialNumber");
this.IsSerialValid=Model.ValidateSerial(string serial);
RaisePropertyChanged("IsSerialValid");
}
public bool IsSerialValid { get; set;}
}

IsSerialValid 属性是您将绑定(bind)到另一个 TextBox 的 IsEnabled 属性的属性。

希望这对您有意义。

关于c# - MVVM - 谁负责,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36884043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com