2010-05-07 57 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方法/两个访问。

相关问题