gpt4 book ai didi

mvvm - 方法应该是属性中的 'fired' 吗?

转载 作者:行者123 更新时间:2023-12-03 10:29:15 30 4
gpt4 key购买 nike

我的应用程序使用 MVVM 模式。我的 TextBox绑定(bind)到我的 ViewModel 的属性(类型字符串)。

何时 TextBox 的内容通过用户输入更改,我想执行一些验证。

所以,目前,我的代码是

<TextBox Text="{Binding XmlContentAsString, UpdateSourceTrigger=PropertyChanged}" />

我的 ViewModel 有这个属性和字段:
        private string _xmlContentAsString;
public string XmlContentAsString
{
get { return _xmlContentAsString; }
set
{
if (_xmlContentAsString == value)
return;

_xmlContentAsString = value;
PerformValidiationLogic(value);//This is where I am unsure
}
}

现在,这行得通,但是,我不知道为什么,我不喜欢这个!将方法包含在属性中有些感觉“被黑客入侵”。

有人可以告诉我这是否是使用 MVVM 模式时的正确方法吗?

最佳答案

有不同类型的验证。
对于简单的验证字符串长度或允许的字符等,您可以使用 DataAnnotations 并将验证放在属性的属性中。你需要包括
使用 System.ComponentModel.DataAnnotations;

然后例如将字符串保持为 9 个字符:

    [StringLength(9)]
public string StringValue
{
get
{
return stringValue;
}

set
{
this.stringValue = value;
}
}

然后是更复杂的验证,并且有效地执行您的业务逻辑。
关于如何做到这一点似乎有很多观点。理想情况下,它应该属于模型,以便可以重用验证,但显然是通过 View 模型调用的。

就我个人而言,我偶尔会在属性 setter 中调用方法,对我来说,这就是能够创 build 置器和 getter 的全部原因 - 否则除了自动属性之外没有任何意义。

但是,如果它是复杂的或异步的,那么您可能会遇到问题。
我会非常小心地使用 UpdateSourceTrigger=PropertyChanged,因为这意味着您将在每个角色中触发它。

关于mvvm - 方法应该是属性中的 'fired' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15922276/

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