我正在创建一个 WPF 应用程序,但遇到了继承问题。
我有一个名为的类DataHandler
,它在 GUI 类和数据类之间建立了联系。
代码需要保持开放,因为 GUI 或 Data 部分将来可能会发生变化,因此DataHandler
使用接口或抽象类引用真实的 GUI/Data 类。
例如,我有一个SelectionFrame
and 它需要使用SetSelection()
and 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
方法?