创建从接口/抽象类和窗口继承的窗口

本文关键字:窗口 继承 抽象类 接口 创建 | 更新日期: 2023-09-27 18:14:28

我正在创建一个WPF应用程序,我遇到了一个继承问题。
我有一个名为DataHandler的类,它在GUI类和数据类之间建立了链接。
代码需要保持开放,因为GUI或数据部分在将来可能会更改,因此DataHandler使用接口或抽象类引用真实的GUI/数据类。

例如,我有一个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(以下):

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

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

创建从接口/抽象类和窗口继承的窗口

你做错了。

你不需要在WPF UI元素中实现任何接口,因为你需要的是使用MVVM模式。

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

将其绑定到UI。