ReSharper自定义转换 - 自动属性到我的属性

时间:2014-03-19 16:00:52

标签: mvvmcross automated-refactoring resharper-7.1

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

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 + 进入上下文菜单以获得第二个选项......像

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

1 个答案:

答案 0 :(得分:4)

即使没有创建任何自定义插件或模式,也可以使用ReSharper Annotations。我最近在JetBrains上录制了一个网络研讨会,演示了如何用注释来解决这个问题。你可以看here

简答:方法

public void RaisePropertyChanged<T>(Expression<Func<T>> property)
MvxNotifyPropertyChange.cs

需要使用NotifyPropertyChangedInvocatorAttribute进行注释,然后您只需在属性上按Alt键输入,然后将其更改为具有更改通知的属性

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

有关详情,请观看我的网络研讨会(上面的链接)或JetBrains help

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

<强> 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>

这就是行动:

Woot!