Итак, я столкнулся с проблемой, пытаясь следовать шаблону MVVM для своего проекта WPF, и потратил часы на поиски решения без удачи.Проблема заключается в следующем. Предположим, что у меня есть стандартная библиотека .net, где у меня есть все модели представления для моего приложения, например, предположим, что есть следующие модели представления:
BaseDropDownMenuViewModel , которая наследуется от BaseControlViewModel
AdvancedDropDownMenuViewModel , который наследуется от BaseDropDownMenuViewModel
1015 * MultiD
MultiD, который наследуется от AdvancedDropDownViewModel
Модели представлений содержат как функциональные возможности элементов управления, так и переменные, используемые для их отображения, например BackColor и ForeColor свойство, которое помещается в BaseControlViewModel .Теперь, хотя для меня этого достаточно, я хочу добавить некоторые свойства, которые применяются только для настольных платформ, например, свойство MouseOverBackColor и свойство MouseOverForeColor , и мне также необходимовозможность переопределить существующие, например, BackColor .Эти свойства, конечно, имеют смысл только на настольной платформе, а не на мобильной платформе.
Теперь я нашел два решения для моей проблемы, но их обоих недостаточно ...
Создайте новую стандартную библиотеку .net с интерфейсом, который заставляет реализацию свойств, доступных только для настольных приложений, и создайте класс для каждой модели представления базовой библиотеки и реализуйте этот интерфейс .В этом сценарии у меня будет огромное количество дублирующегося кода, но я смогу использовать эти классы для моей версии Windows для моего приложения, и в мобильной версии не будет неиспользуемых переменных для каждого из его элементов управления, например MouseOverBackColor свойство, которым оно не может воспользоваться.
, что приводит нас ко второму варианту, который заключается в реализации этих свойств ( MouseOverBackColor , MouseOverForeColor , ...) в BaseControlViewModel в базовой стандартной библиотеке .net, и все версии моего приложения имеют эти переменные, хотя некоторые из них не могут их использовать.Таким образом, я хочу иметь дублирующийся код ...
Я считаю, что эту проблему было бы легко решить, если бы C # поддерживал множественное наследование классов, но так как это не так, я пытаюсь найтиеще один «волшебный» способ решения этой проблемы.Примечание: я также искал трюки для достижения «мультиклассового наследования», но те, которые меня интересовали, хранили классы как переменные в основном классе, что на данный момент меня не интересует, потому что приложение потребовало бы массивногомодификация, чтобы воспользоваться этим трюком ...