将 Fody.PropertyChanged 与 MVVMCross 一起使用安全吗?还是会降低应用程序的性能?

Is it safe to use Fody.PropertyChanged with MVVMCross Or it is down the performance of app?

今天在网上看到一个新的插件Fody.PropertyChanged,非常简单易用。

目前我正在使用 MVVMCross,我们必须一次又一次地调用 Raise属性Change(()=>属性)。将 Fody.PropertyChanged 与 MVVMCross 一起使用是否安全。任何人都有这方面的经验我也看过这个使用 MVVMCross 和 Foody.RaisePropertyChange

的例子

https://github.com/slodge/BindingTalk/blob/master/BindingTalk.Droid/ViewModels/FodySimpleViewModel.cs

或者 MVVMCross 中是否有任何解决方案可以让我们摆脱一次又一次地使用 Rais属性Change()

谢谢,

此致

Fody.PropertyChanged 不应比手动调用 RaisePropertyChanged 慢。 Fody.PropertyChanged 有效的作用是在编译时为您编写代码。

因此,您不必键入所有那些混乱的 RaisePropertyChanged 调用,也不必查看它们,从而使您的代码更加简洁。但是,如果您查看编译的内容(使用 ILSpy 或类似程序),您会发现它们都是自动添加的。所以,从性能的角度来看,应该没有区别,但是它让你的代码更容易编写,更容易阅读,更容易维护。

我是 Fody.PropertyChanged 的超级粉丝。多年来,我一直将它与 MVVM Light(我认为它与 MVVMCross 类似)一起使用,而且我从未发现它是导致速度下降的原因。我绝对建议你试一试。

如果您正在使用版本控制(您应该使用),请提交您的项目,安装 Fody.PropertyChanged,摆脱所有那些 RaisePropertyChanged 调用,然后观看奇迹发生。如果您不喜欢它,您可以随时返回到之前的版本。

您可以使用 [DoNotNotify] 属性将 属性 或类型排除在注入通知之外,或注入 [DependsOnAttribute] 属性 在设置依赖项 属性 时收到通知。

更多信息: https://github.com/Fody/PropertyChanged

正如@devuxer 所说,Fody.PropertyChanged 不会降低性能。它不会导致比 RaisePropertyChanged(() => ...) 更多的处理,因为这正是您在编译应用程序时得到的,没有别的。 您可以在 readme file

中确切地看到它是如何工作的

我在我的 MvvmCross 应用程序中到处都使用 Fody。模型、视图模型等

[ImplementPropertyChanged]
public class HomeViewModel : BaseViewModel
{
    // every property will notify changes
    public string Foo { get; set; }
}

[ImplementPropertyChanged]
public class ChatMessage
{
    public string Uid { get; set; }
    public DateTime? SentAt { get; set; }
    public string SenderConnectionId { get; set; }
    public string UserName { get; set; }
    public string Content { get; set; }
}

注意:如果将 method binding 添加到组合中,您将摆脱大量的样板代码。我没有在整个应用程序中使用单个命令