Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM中的重拾器警告_C#_Wpf_Mvvm_Resharper_Warnings - Fatal编程技术网

C# MVVM中的重拾器警告

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

当我用WPF实现MVVM模式时,我发现ReSharper经常警告我某些属性从未在我的ViewModels中使用过。问题是它们正在被使用,但只被数据绑定系统使用。还有其他人遇到过这种麻烦吗?有没有办法帮助ReSharper意识到这些属性确实正在被使用?我很高兴,至少VS 2010正确地认识到[Import]标记的成员不会“总是空的”,但希望我也能解决这个问题。

一个粗略的解决方法是完全禁用警告:

在ReSharper>Options>Code Inspection>Inspection Severity下,将此项目的警告级别设置为“不显示”


这显然不理想,但这取决于您对误报的烦恼程度。

您可以尝试两种不同的选择

  • 选项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}">