创建一个继承自接口/抽象类和Window的窗口

时间:2013-05-20 10:35:00

标签: c# wpf oop inheritance

我正在创建一个WPF应用程序,但我遇到了继承问题 我有一个名为DataHandler的类,它在GUI类和数据类之间建立链接 代码需要保持打开状态,因为GUI或数据部分将来可能会发生变化,因此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方法?

1 个答案:

答案 0 :(得分:2)

你做错了。

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

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