Когда я реализую шаблон MVVM с WPF, я обнаружил, что Resharper часто предупреждает меня, что некоторые свойства никогда не используются в моих моделях ViewModels. Проблема в том, что они используются, но только по системе привязки данных. Кто-нибудь еще столкнулся с этим раздражением и есть ли способ помочь Решарперу понять, что эти свойства действительно используются? Я рад, по крайней мере, что VS 2010 правильно понимает, что тегированные элементы [Import] не будут "всегда иметь значение null", но, надеюсь, я также смогу исправить эту проблему.
Предупреждения Resharper с MVVM
Ответ 1
Вы можете использовать внешние аннотации, чтобы указать Resharper, что метод используется и, таким образом, не предупреждать вас. см. документы Resharper на здесь
Вам необходимо украсить любые такие методы с помощью [UsedImplicitlyAttribute]
Перед использованием атрибута вы увидите:
а затем после применения атрибута:
[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 несмотря на)