我正在创建一个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
方法?
答案 0 :(得分:2)
你做错了。
您不需要在WPF UI元素中实现任何接口,因为您需要使用MVVM Pattern。
不是在UI元素中实现该接口,而是创建一个合适的ViewModel来保存您的数据和应用程序逻辑,并通过DataBinding将其绑定到UI