2010-05-07 8 views
23

Als ich das MVVM-Muster mit WPF implementiere, merke ich, dass Resharper mich oft davor warnt, dass bestimmte Eigenschaften niemals in meinen ViewModels verwendet werden. Das Problem ist, dass sie verwendet werden, aber nur durch das Datenbindungssystem. Ist jemand anderer auf diesen Ärger gestoßen und gibt es eine Möglichkeit, Resharper zu zeigen, dass diese Eigenschaften tatsächlich genutzt werden? Ich bin zumindest froh, dass VS 2010 richtig erkannt hat, dass [Import] getaggte Mitglieder nicht "immer null sein", aber hoffentlich kann ich dieses Problem auch beheben.Nachschärfwarnungen mit MVVM

Antwort

21

Sie können externe Anmerkungen verwenden, um Resharper anzugeben, dass die Methode verwendet wird, und Sie somit nicht zu warnen. siehe die ReSharper docs auf diesem here

Sie müssen alle solche Methoden dekorieren mit [UsedImplicitlyAttribute]

Bevor Sie das Attribut, das Sie sehen:

enter image description here

und dann nach dem Attribut Anwendung:

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

Danke, das ist eine sehr nützliche Information. –

+0

Gibt es auch eine Möglichkeit, dieses Attribut auf alle Mitglieder von beispielsweise einer Schnittstelle anzuwenden? Ich habe die ImplicituseTargetFlags ausprobiert, hatte aber keinen Erfolg. – Matthias

+0

@ Matthias Koch das funktioniert für mich mit 'ImplicitUseTargetFlags.WithMembers' - siehe meine aktualisierte Antwort oben, wo ich Screenshots bereitgestellt habe. – wal

2

Eine grobe Abhilfe die Warnung vollständig zu deaktivieren wäre:

Unter ReSharper> Optionen> Code-Inspektion> Prüfschärfe, stellen Sie die Warnstufe für diesen Titel „Do not zeigen“.

Dies ist offensichtlich nicht ideal, aber es hängt von Ihrem Grad der Belästigung mit den falschen Positivs ab.

4

Sie können zwei verschiedene Optionen ausprobieren. Eine besteht darin, den Schweregrad der Nachschärfeinspektion auf "Hinweis" zu reduzieren. Die andere Option besteht darin, den Eintrag "Überprüfung durch Kommentar unterdrücken" zu verwenden, den Resharper für die Eigenschaften bereitstellt, die die Warnung generieren, von der Sie wissen, dass sie verwendet wird. Persönlich würde ich den Schweregrad auf "Hinweis" reduzieren.

+1

Die Reduzierung des Schweregrads auf Hint funktioniert jetzt gut genug. Es störte mich, unaufgelöste orangefarbene Linien rechts von meinem Unterricht zu sehen. –

0

Sind die Eigenschaften öffentlich oder intern? Meiner Erfahrung nach warnt ReSharper nicht vor Scham (da es keine Möglichkeit gibt, zu erkennen, dass die Mitglieder nicht extern verwendet werden), warnt jedoch vor internen Mitgliedern, da sie nur innerhalb dieser Baugruppe verwendet werden können (InternalsVisibleTo ungeachtet)

+0

Sie sind öffentlich und ich konnte die Einstellungen nur für öffentliche Eigenschaften in Hint ändern. Ich werde immer noch eine Warnung für private/interne Eigenschaften sehen, was in Ordnung ist. Die Warnung wird im Kontext der lösungsweiten Analyse angezeigt, da "Auto-implementierter Eigenschaftenaccessor nie verwendet wird". –

13

Verwenden Sie

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

Es Stick Ansicht zu Modell. In der Ansicht können Sie Modelleigenschaften sehen und umgekehrt - in Modelleigenschaften sollte verwendet werden.

+0

Dies hilft nicht, wenn das Ansichtsmodell wie in vielen MVVM-Frameworks über das Attribut x: Name automatisch an die Ansicht gebunden ist. – Nathan

+2

Dies scheint die beste Lösung für mich. –

2

Dies liegt an der schwach typisierten XAML-Bindungen.

Damit ReSharper die Eigenschaften der VM, die Sie in der XAML-Ansicht verwenden, auflösen kann, müssen Sie Annotationen des Datenkontexttyps für {Binding} s in Markup einführen. Weitere Informationen finden Sie im Abschnitt "Binding assistance" unter this blog post. Sie erhalten die korrekte Analyse, Navigation und Refactorings-Unterstützung, wenn ReSharper den Datenkontexttyp kennt.

ReSharper weiß auch über OneWay/OneWayToSource/TwoWay Bindungen Modi und markiert Eigenschaften Getter/Setter/beide Accessoren als verwendet wurden.