gpt4 book ai didi

c# - MVVM CallerMemberName 和 "magic strings"

转载 作者:太空宇宙 更新时间:2023-11-03 21:49:59 24 4
gpt4 key购买 nike

新的 C# 5.0 版本引入了一些东西来摆脱 INotifyPropertyChanged 实现中的“魔法字符串”,例如:

OnPropertyChanged("CustomerName");

现在可以只写:

OnPropertyChanged();

可能是由于方法定义中的CallerMemberName:

protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{ ... }

它比“魔术字符串”方式重构更友好,比 lambda 表达式更快,但我想知道我们如何从一个集合访问器调用多次 OnPropertyChanged。例如,如果我们想要这样的东西:

public int Width
{
get
{
return width;
}
set
{
width = value;
OnPropertyChanged("Width");
OnPropertyChanged("Height");
}
}

我们如何使用 CallerMemberName 方式来避免使用“魔术字符串”和 lambda 表达式?

我还想知道我们如何避免在 IDataError 信息中使用“魔术字符串”:

public string Error
{
get;
private set;
}

public string this[string columnName]
{
get
{
if (columnName == "Name")
{
if (String.IsNullOrWhiteSpace(Name))
Error = "Name cannot be null or empty.";
else
Error = null;
}

return Error;
}
}

我是 MVVM 的新手,所以也许我忽略了一些处理“魔术字符串”的巧妙方法,但是我做了一些研究但一无所获。

最佳答案

答案很简单,您不能那样做。如名称 CallerMemberName 所示,它将包含调用者的姓名。
对于您想要为另一个而不是当前的引发 PropertyChanged 的情况,您将不得不使用其中一种“旧”方式。

IDataErrorInfo 中,您也必须使用其中一种方法,没有其他选择。

关于c# - MVVM CallerMemberName 和 "magic strings",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15039415/

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