【问题标题】:Creating a window that inheritate from an interface/abstract class and Window创建从接口/抽象类和 Window 继承的窗口
【发布时间】:2013-05-14 21:35:21
【问题描述】:

我正在创建 WPF 应用程序,但遇到了继承问题。
我有一个名为 DataHandler 的类,它在 GUI 类和数据类之间建立了联系。
代码需要保持打开状态,因为 GUI 或 Data 部分将来可能会发生变化,因此DataHandler 使用接口或抽象类引用到真正的 GUI/Data 类。

例如,我有一个SelectionFrame,它需要使用SetSelection()GetSelection(),我创建了一个ISelectionGUI 接口,它具有这两种方法。 SelectionFrame实现它。

public interface ISelectionGUI
{
    void SetSelection(HashSet<String> fields);

    void GetSelection(HashSet<String> fields);
}

 public partial class SelectionFrame : Window, ISelectionGUI
{
   [...]
}

DataHandler 类中是这样的:

ISelectionGUI sF = new SelectionFrame();

但在执行此操作时,我无法使用 Window 方法,除非我这样转换:

((Window)sF).Show();

这似乎不是最好的解决方案,因为没有什么会迫使下一个开发人员扩展 Window
我还尝试使用扩展Window 的抽象类并拥有我需要的方法。 SelectionFrame扩展了那个类,我改变了xaml (following this)

<base:ISelectionGUI x:Class="WFChecker.SelectionFrame"
    [...]
    xmlns:base="clr-namespace:WFChecker"
    [...]
</base:ISelectionGUI>

但我没有工作,因为 VisualStudio 不允许我在设计器中使用抽象类。 我的问题是:如何创建一个实现类或扩展抽象类的框架,同时仍然能够访问 Window 方法?

【问题讨论】:

  • 只是为了交叉检查,您的 SelectionFrame 继承 Window 类并实现 ISelectionGUI?如果是,请分享完整的代码结构。
  • @SumitGupta,确实如此,编辑了我的帖子。
  • 在你的界面中添加一个 show 方法?
  • @TonyHopkinson,但这意味着将我需要的每个方法从 Window 类添加到 ISelectionGUI。我不确定这是一个好方法。
  • 我不太确定,但我记得在我的项目中,我通常在我的自定义基类中继承系统类,然后我开发的所有 Window 和 Form,我从我的基类而不是 Window 继承它们班级。似乎这里的 SelectionFrame 是部分类 [原始窗口],而不是创建一个 BaseSelection,继承/实现所有你想要的,然后使用该 Base 类作为 SelectionFrame 的父类。希望能解决。

标签: c# wpf oop inheritance


【解决方案1】:

你做错了。

您不需要在 WPF UI 元素中实现任何接口,因为您需要使用MVVM Pattern

不要在 UI 元素中实现该接口,而是创建一个适当的 ViewModel 来保存您的数据和应用程序逻辑,并通过 DataBinding 将其绑定到 UI

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-09
    • 2015-10-16
    • 2019-01-09
    • 2014-10-09
    • 2012-04-11
    • 2021-06-25
    • 1970-01-01
    • 2017-11-27
    相关资源
    最近更新 更多