2

在我们的架构中,我们有一堆这样的模型

public class UserModel
{
    public string FirstName {get;set;}
}

由于我们使用 MvvmCross 作为我们的视图模型,我们需要我们的属性看起来像这样

public class UserViewModel: MvxViewModel
{
    private string _firstName;
    public string FirstName
    {
        get { return _firstName; }
        set { _firstName = value; RaisePropertyChanged(() => FirstName); }
    }
}

现在我已经有了一个 R# 模板,只需键入即可编写我自己的 mvx 属性propmvx,但我仍然需要键入类型和名称。

我想知道是否有一种方法可以设置自定义转换模板,以便让alt+enter上下文菜单有第二个选项......比如

  • [T]o 具有支持字段的属性
  • 到带有支持字段的 [M]vx 属性
4

1 回答 1

4

即使不创建任何自定义插件或模式,使用ReSharper Annotations也是可能的。我最近用 JetBrains 录制了一个网络研讨会,准确地演示了如何使用注释来解决这个问题。你可以在这里观看。

简短的回答:方法

public void RaisePropertyChanged<T>(Expression<Func<T>> property)

ofMvxNotifyPropertyChange.cs需要用 注释NotifyPropertyChangedInvocatorAttribute,然后您可以简单地在属性上 Alt-Enter ,并将其更改为带有更改通知的属性

现在,由于您不能(或不想)修改 MvvmCross 的源代码,您可以通过 XML 在外部应用这些注释。查看位于 ReSharper 安装目录中的ExternalAnnotations目录。它包含一堆用于其他 MVVM 框架的外部注释。这是一种简单的 XMLDoc 格式,因此您可以为 MvvmCross 创建一个 XML 并在其中编写适当的方法。之后,将文件保存在一个目录下MvvmCross(或者无论如何调用程序集),重新加载您的解决方案,它应该可以正常工作!

有关更多信息,请观看我的网络研讨会(上面的链接)或JetBrains 帮助

这是一个可以使用该方法的外部注释文件。

Cirrious.MvvmCross.ExternalAnnotations.xml

<?xml version="1.0" encoding="utf-8"?>
<assembly name="Cirrious.MvvmCross">

  <member name="M:Cirrious.MvvmCross.ViewModels.MvxNotifyPropertyChanged.RaisePropertyChanged``1(System.Linq.Expressions.Expression{System.Func{``0}})">
    <attribute ctor="M:JetBrains.Annotations.NotifyPropertyChangedInvocatorAttribute.#ctor" />
  </member>

</assembly>

它在行动中:

哇!

于 2014-03-19T16:22:20.137 回答