Подтвердить что ты не робот

Предупреждения Resharper с MVVM

Когда я реализую шаблон MVVM с WPF, я обнаружил, что Resharper часто предупреждает меня, что некоторые свойства никогда не используются в моих моделях ViewModels. Проблема в том, что они используются, но только по системе привязки данных. Кто-нибудь еще столкнулся с этим раздражением и есть ли способ помочь Решарперу понять, что эти свойства действительно используются? Я рад, по крайней мере, что VS 2010 правильно понимает, что тегированные элементы [Import] не будут "всегда иметь значение null", но, надеюсь, я также смогу исправить эту проблему.

4b9b3361

Ответ 1

Вы можете использовать внешние аннотации, чтобы указать Resharper, что метод используется и, таким образом, не предупреждать вас. см. документы Resharper на здесь

Вам необходимо украсить любые такие методы с помощью [UsedImplicitlyAttribute]

Перед использованием атрибута вы увидите:

enter image description here

а затем после применения атрибута:

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

Ответ 2

Использование

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

Наклейте "Вид на модель". В представлении вы можете видеть свойства модели, и наоборот - в свойствах модели следует использовать.

Ответ 3

Вы можете попробовать два разных варианта. Один из них - уменьшить серьезность проверки Resharper до "Подсказки". Другой вариант - использовать параметр "Подавить проверку с комментариями". Resharper предоставляет свойства, генерирующие предупреждение, которое, как вы знаете, используется. Лично я пошел бы с уменьшением серьезности на "Подсказка".

Ответ 4

Неправильное обходное решение было бы полностью отключить предупреждение:

В разделе "Решайер" > "Параметры" > "Проверка кода" > "Уровень проверки" установите уровень предупреждения для этого элемента "Не показывать".

Это, очевидно, не идеально, но это зависит от вашего уровня раздражения от ложных срабатываний.

Ответ 5

Это из-за слабо типизированной привязки XAML.

Чтобы ReSharper смог решить, какие свойства виртуальной машины вы используете из представления XAML, вам необходимо ввести аннотации типов контекста данных для {Binding} в разметке. Подробнее см. Раздел "Помощь по связыванию" в этом сообщении в блоге. Вы получите правильное использование анализа, навигации и рефакторинга, когда ReSharper будет известен тип контекста данных.

ReSharper также знает о OneWay/OneWayToSource/TwoWay режимах привязки и маркирует свойства getters/setters/оба аксессора, которые используются соответственно.

Ответ 6

Являются ли свойства общедоступными или внутренними? По моему опыту, ReSharper не предупреждает на лобке (поскольку он не может сказать, что члены не используются извне), но он будет предупреждать о внутренних членах, поскольку они могут использоваться только в этой сборке (InternalsVisibleTo несмотря на)