首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图模型的跨平台继承

视图模型的跨平台继承
EN

Stack Overflow用户
提问于 2018-11-21 11:06:48
回答 1查看 77关注 0票数 0

因此,我在尝试为我的WPF项目遵循MVVM模式时遇到了一个问题,我花了几个小时寻找一个没有运气的解决方案。问题如下:假设我有一个.net标准库,其中有我的应用程序的所有视图模型,例如,假设有以下视图模型:

继承自BaseDropDownMenuViewModelBaseControlViewModel 继承自AdvancedDropDownMenuViewModelBaseDropDownMenuViewModel 继承自MultiDropDownViewModelAdvancedDropDownViewModel

视图模型既包含控件的功能,也包含用于显示控件的变量,例如放置在BaseControlViewModel.中的BackColorForeColor属性。现在,尽管这对我来说已经足够了,但我想添加一些仅适用于桌面平台的属性,例如MouseOverBackColorMouseOverForeColor属性,并且我还需要能够覆盖现有的属性(除BackColor之外)。当然,这些属性只在桌面平台上有意义,而不是在移动平台上。

现在我找到了两种方法来解决我的问题,但这两种方法都不够.

  • 创建一个新的.net标准库,其接口强制实现只能用于桌面应用程序的属性,为基库的每个视图模型创建一个类,并实现该接口。在这个场景中,我将有大量重复的代码,但我将能够在我的Windows版本的应用程序中使用这些类,并且移动版本不会为其每个控件都有未使用的变量,例如它无法利用的MouseOverBackColor属性。
  • 这就引出了我的第二个选择,就是实现这些属性(MouseOverBackColorMouseOverForeColor,.)在基础的BaseControlViewModel上,.net标准库和我的应用程序的所有版本都有这些变量,尽管有些人可能无法利用它们。这样我就想要重复的代码..。

我相信,如果C#支持类的多继承,这个问题将很容易解决,但由于没有,我试图找到另一种“神奇”的方法来解决这个问题。注意:我还搜索了实现“多类继承”的技巧,但我感兴趣的是将类存储为主类中的变量,这一点我目前并不感兴趣,因为应用程序需要进行大量修改才能利用这个技巧……

EN

回答 1

Stack Overflow用户

发布于 2018-11-21 16:58:30

您可以通过接口来完成这一任务:

示例-一个类,两个接口

代码语言:javascript
复制
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;}
}

现在,在您的桌面应用程序中,您将有如下所示

代码语言:javascript
复制
// Will only see properties BackColor and MouseOverBackColor
private IDesktopProperties myProps;
public MyDesktopUI( IDesktopProperties properties ) // <= injected: MySuperFancyViewModel 
{
    myProps = properties;
}

和相应的移动电话

代码语言:javascript
复制
// Will only see properties BackColor and ScreenOrientation
private IMobileProperties myProps;
public MyMobileUI( IMobileProperties properties ) // <= injected: MySuperFancyViewModel 
{
    myProps = properties;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53410779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档