2014-03-19 36 views
2

在我們的架構,我們有這樣ReSharper的自定義轉換 - AutoProperty到MvxProperty

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·模板只需輸入propmvx寫我自己的MVX的屬性,但我仍然需要在類型和類型 名字。

我不知道是否有一種方法來設置,以自定義轉換模板有ALT +進入上下文菜單中有第二個選項...像

  • [T] O屬性與支持字段
  • 至[M]與支持字段VX屬性

回答

4

這是可能的,即使沒有創建任何自定義插件或模式,通過使用ReSharper Annotations。我最近錄製了一個JetBrains的網絡研討會,展示瞭如何用註釋解決這個問題。你可以看它here

簡短的回答:方法

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

NotifyPropertyChangedInvocatorAttribute進行註釋,然後你可以簡單地對房地產Alt-Enter組合,並將其與變化notificaton更改爲屬性。

現在,由於您不能(或不想)修改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!

+0

我不會推薦節能產品目錄中的XML文件。該目錄將不會在8.2(註釋現在打包爲擴展名)。用mvvmcross dll並排保存xml文件,或者將它打包爲自己的擴展名 - http://confluence.jetbrains.com/display/NETCOM/1.06+Packaging+%28R8%29 – citizenmatt

+1

是的,@ citizenmatt是對!但我不想在這裏指定它,因爲它被標記爲「ReSharper-7.1」,所以... –

+0

@citizenmatt我正在使用R#7.1,但我們將很快升級。我現在所做的是創建一個'ViewModelBase',它擴展'MvxViewModel'從那裏我'新'''RaisePropertychanged'並相應地註釋它。 –