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

本文关键字:或者 性能 应用程序 PropertyChanged Fody MVVMCross 一起 安全 | 更新日期: 2023-09-27 18:25:40

今天我在网上读到了一个新的插件,它非常简单易用。

目前我正在使用MVVMCross,我们必须一次又一次地调用RaisePropertyChange(()=>Property)。将Fody.PropertyChanged与MVVMCross一起使用是否安全。任何一个有经验的人我也看了这个使用MVVMCross和Foody.RaisePropertyChange 的例子

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

或者MVVMCross中有什么解决方案可以让我们摆脱一次又一次使用RaisPropertyChange()的

谢谢,

最诚挚的问候

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

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

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

我是Fody.PropertyChanged的超级粉丝。多年来,我一直在MVVM Light(我相信它与MVVMCross类似)中使用它,但我从未发现它是速度减慢的原因。我绝对建议你试一试。

如果你使用的是版本控制(你应该这样做),那么提交你的项目,安装Fody.PropertyChanged,去掉所有那些RaisePropertyChanged调用,然后看着神奇的事情发生。如果你不喜欢它,你可以随时回到你以前的版本。

正如@devuxer所说,Fody.PropertyChanged不会降低性能。它不会引起比RaisePropertyChanged(()=>…)更多的处理因为这正是你在编译应用程序时得到的,而不是别的。你可以在自述文件中看到它是如何工作的

我在我的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; }
}

注意:如果您将方法绑定添加到混合中,您将摆脱大量的样板代码。我在整个应用程序中不使用任何命令

您可以使用[DoNotNotNotify]属性来排除已注入通知的属性或类型,或者在设置依赖属性时注入要通知的[EdependsOnAttribute]

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