2010-05-07 56 views
23

當我使用WPF實現MVVM模式時,我發現Resharper經常警告我某些屬性從未在我的ViewModel中使用過。問題在於它們正在被使用,但只能通過數據綁定系統。是否有其他人遇到過這種煩惱,有沒有辦法幫助Resharper意識到這些屬性確實正在被使用?至少,我很高興VS 2010能正確認識到[Import]標記的成員不會「永遠是空的」,但希望我能解決這個問題。MVVM的Resharper警告

回答

21

您可以使用外部註釋向Resharper指示使用的方法,因此不會警告您。查看該here

ReSharper的文檔你需要裝飾的任何這樣的方法與[UsedImplicitlyAttribute]

使用屬性之前,您會看到:

enter image description here

,然後應用屬性之後:

[UsedImplicitly(ImplicitUseTargetFlags.WithMembers)] 
class NotUsed 
{ 
    public int Field1 { get; set; } 
    public int Field2 { get; set; } 
} 
+0

謝謝,這是非常有用的信息。 – 2011-01-31 17:34:26

+0

還有一種方法可以將此屬性應用於例如接口的所有成員?我嘗試了ImplicituseTargetFlags,但沒有成功。 – Matthias 2011-11-22 17:21:53

+0

@ Matthias Koch這對我使用'ImplicitUseTargetFlags.WithMembers' - 請參閱上面我提供的屏幕截圖的更新回答。 – wal 2011-11-22 22:40:31

2

粗的解決方法是完全禁用警告:

在ReSharper的>選項>代碼檢查>檢查嚴重程度,設置此項目爲「不顯示」的警告級別。

這顯然不理想,但這取決於您的誤報程度和誤報。

4

您可以嘗試兩種不同的選項。一種是將Resharper檢查的嚴重性降低到「提示」。另一種選擇是使用「抑制帶註釋的檢查」項目Resharper提供的屬性會生成您正在使用的警告。就個人而言,我會盡量減輕嚴重程度以「提示」。

+1

現在,將提示級別降低到足夠好。我很困擾地看到我的課程右邊沒有解決橙線問題。 – 2010-05-07 20:29:04

0

該屬性是公開的還是內部的?根據我的經驗,ReSharper並沒有警告公衆(因爲它無法告訴成員沒有被外部使用),但它會警告內部成員,因爲他們只能在該程序集中使用(InternalsVisibleTo,儘管如此)

+0

他們是公開的,我可以將設置更改爲僅提供公共屬性的提示。我仍然會看到私人/內部屬性的警告,這很好。該警告在解決方案範圍分析的上下文中顯示爲「自動實施的屬性訪問器從不使用」。 – 2010-05-09 17:59:56

13

使用

<UserControl 
... 
xmlns:vm="clr-namespace:YourProject.ViewModels" mc:Ignorable="d" 
d:DataContext="{d:DesignInstance vm:SomeClassViewModel}"> 

它堅持查看模型。 在視圖中,您可以看到模型屬性,反之亦然 - 應該使用模型屬性。

+0

當視圖模型通過像許多MVVM框架中的x:Name屬性自動魔術般地綁定到視圖時,這沒有幫助。 – Nathan 2012-10-03 15:28:06

+2

這對我來說似乎是最好的解決方案。 – 2012-11-16 13:27:55

2

這是因爲XAML綁定的弱類型性質。

要讓ReSharper能夠解析您在XAML視圖中使用的VM的屬性,您需要爲標記中的{Binding} s引入數據上下文類型註釋。有關詳細信息,請參閱this blog post中的「裝訂幫助」部分。當ReSharper知道數據上下文類型時,您將得到正確的使用分析,導航和重構支持。

ReSharper的也知道OneWay/OneWayToSource/TwoWay綁定模式和分別用於將屬性getter/setter方法/兩個訪問。

相關問題