因此,我在尝试为我的WPF项目遵循MVVM模式时遇到了一个问题,我花了几个小时寻找一个没有运气的解决方案。问题如下:假设我有一个.net标准库,其中有我的应用程序的所有视图模型,例如,假设有以下视图模型:
继承自BaseDropDownMenuViewModel的BaseControlViewModel 继承自AdvancedDropDownMenuViewModel的BaseDropDownMenuViewModel 继承自MultiDropDownViewModel的AdvancedDropDownViewModel
视图模型既包含控件的功能,也包含用于显示控件的变量,例如放置在BaseControlViewModel.中的BackColor和ForeColor属性。现在,尽管这对我来说已经足够了,但我想添加一些仅适用于桌面平台的属性,例如MouseOverBackColor和MouseOverForeColor属性,并且我还需要能够覆盖现有的属性(除BackColor之外)。当然,这些属性只在桌面平台上有意义,而不是在移动平台上。
现在我找到了两种方法来解决我的问题,但这两种方法都不够.
我相信,如果C#支持类的多继承,这个问题将很容易解决,但由于没有,我试图找到另一种“神奇”的方法来解决这个问题。注意:我还搜索了实现“多类继承”的技巧,但我感兴趣的是将类存储为主类中的变量,这一点我目前并不感兴趣,因为应用程序需要进行大量修改才能利用这个技巧……
发布于 2018-11-21 16:58:30
您可以通过接口来完成这一任务:
示例-一个类,两个接口
public interface IDesktopProperties
{
Color BackColor {get; set;}
Color MouseOverBackColor {get; set;}
}
public interface IMobileProperties
{
Color BackColor {get; set;}
Orientation ScreenOrientation {get; set;}
}
public class MySuperFancyViewModel : IDesktopProperties, IMobileProperties
{
public Color BackColor {get; set;}
public Color MouseOverBackColor {get; set;}
public Orientation ScreenOrientation {get; set;}
}现在,在您的桌面应用程序中,您将有如下所示
// Will only see properties BackColor and MouseOverBackColor
private IDesktopProperties myProps;
public MyDesktopUI( IDesktopProperties properties ) // <= injected: MySuperFancyViewModel
{
myProps = properties;
}和相应的移动电话
// Will only see properties BackColor and ScreenOrientation
private IMobileProperties myProps;
public MyMobileUI( IMobileProperties properties ) // <= injected: MySuperFancyViewModel
{
myProps = properties;
}https://stackoverflow.com/questions/53410779
复制相似问题