C# MVVM中的重拾器警告
当我用WPF实现MVVM模式时,我发现ReSharper经常警告我某些属性从未在我的ViewModels中使用过。问题是它们正在被使用,但只被数据绑定系统使用。还有其他人遇到过这种麻烦吗?有没有办法帮助ReSharper意识到这些属性确实正在被使用?我很高兴,至少VS 2010正确地认识到[Import]标记的成员不会“总是空的”,但希望我也能解决这个问题。一个粗略的解决方法是完全禁用警告: 在ReSharper>Options>Code Inspection>Inspection Severity下,将此项目的警告级别设置为“不显示”C# MVVM中的重拾器警告,c#,wpf,mvvm,resharper,warnings,C#,Wpf,Mvvm,Resharper,Warnings,当我用WPF实现MVVM模式时,我发现ReSharper经常警告我某些属性从未在我的ViewModels中使用过。问题是它们正在被使用,但只被数据绑定系统使用。还有其他人遇到过这种麻烦吗?有没有办法帮助ReSharper意识到这些属性确实正在被使用?我很高兴,至少VS 2010正确地认识到[Import]标记的成员不会“总是空的”,但希望我也能解决这个问题。一个粗略的解决方法是完全禁用警告: 在ReSharper>Options>Code Inspection>Inspection Severi
这显然不理想,但这取决于您对误报的烦恼程度。您可以尝试两种不同的选择
- 选项1:将ReSharper检查的严重性降低为“提示”
- 选项2:使用ReSharper为生成您知道正在使用的警告的属性提供的“抑制带注释的检查”项
就个人而言,我会将严重性降低为“提示”。属性是公共的还是内部的?根据我的经验,ReSharper不会对public发出警告(因为它无法判断成员没有被外部使用),但会对内部成员发出警告,因为它们只能在该程序集中使用(尽管有InternalsVisibleTo).您可以使用外部注释来指示使用的方法,从而不向您发出警告。请参阅上面的ReSharper文档 您需要使用
[usedimplicityattribute]
装饰任何此类方法
在使用该属性之前,您会看到:
然后,在应用属性之后:
[UsedImplicitly(ImplicitUseTargetFlags.WithMembers)]
class NotUsed
{
public int Field1 { get; set; }
public int Field2 { get; set; }
}
使用
它将视图粘贴到模型上。
在视图中,您可以看到模型属性,反之亦然-应该使用模型属性。这是因为XAML绑定的弱类型特性 为了使ReSharper能够从XAML视图解析您使用的VM属性,您需要在标记中为
{Binding}
s引入数据上下文类型注释。有关详细信息,请参阅中的“绑定协助”部分。当ReSharper使用已知的数据上下文类型时,您将获得正确的使用分析、导航和重构支持
ReSharper还知道单向/
单向到源
/双向
绑定模式,并将属性getter/setter/两个访问器分别标记为已使用。降低提示的严重性目前已经足够了。在我的类的右侧看到未解析的橙色线条让我很烦恼。它们是公共的,我可以将设置更改为只提示公共属性。我仍然会看到私有/内部属性的警告,这很好。警告在解决方案范围的分析中显示为“从未使用自动实现的属性访问器”。是否还有方法将此属性应用于(例如)接口的所有成员?我试过隐式目标标签,但是没有成功。@Matthias Koch这对我来说适用于使用隐式TargetFlags。对于成员
-请查看上面我提供的屏幕截图的更新答案。当视图模型像在许多MVVM框架中一样通过x:Name属性自动绑定到视图时,这没有帮助。这似乎是最好的解决方案。
<UserControl
...
xmlns:vm="clr-namespace:YourProject.ViewModels" mc:Ignorable="d"
d:DataContext="{d:DesignInstance vm:SomeClassViewModel}">