2

今天我在网上阅读了关于Fody.PropertyChanged的​​新插件,它非常简单易用。

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

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

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

谢谢,

最良好的问候

4

3 回答 3

5

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

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

我是 Fody.PropertyChanged 的​​忠实粉丝。多年来,我一直在使用 MVVM Light(我相信它与 MVVMCross 类似),但我从未发现它是导致速度下降的原因。我绝对建议你试一试。

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

于 2015-12-04T08:35:05.587 回答
4

正如@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; }
}

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

于 2015-12-05T00:56:37.273 回答
1

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

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

于 2015-12-04T08:56:25.620 回答