gpt4 book ai didi

c# - 安全地订阅 PropertyChanged

转载 作者:行者123 更新时间:2023-11-30 22:11:29 28 4
gpt4 key购买 nike

我有以下方法:

void ViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "InitializeFailureMessage":
if (Vm.InitializeFailureMessage != null)
ShowInitializeFailure(Vm.InitializeFailureMessage);
break;
}
}

刚刚,该方法有一个错误:该属性曾经被称为InitializeFailureErrorMessage,重命名后,没有人更新此处理程序中的字符串。

是否有更好、更不容易出错的方法来订阅 PropertyChanged 事件?在触发事件时,我们现在可以使用 [CallerMemberName]。实现处理程序时是否有类似的技巧?

最佳答案

使用扩展方法、表达式和委托(delegate)的快速想法:

public static class Extension
{
public static void RegisterNotify<T>(this T obj, Expression<Func<T, object>> propExpr, Action action) where T : INotifyPropertyChanged
{
string name = GetPropertyName(propExpr);
obj.PropertyChanged += (s, e) => { if (e.PropertyName == name) action() };
}
}

它的名字是这样的:

    Notifier obj = new Notifier(); // implements INotifyPropertyChanged
obj.RegisterNotify(x => x.Property, () => { /* do something when Property changes */ });
obj.RegisterNotify(x => x.Property2, () => { /* do something else when Property2 changes */ });

关于c# - 安全地订阅 PropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20218286/

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