0

WPF アプリケーションを作成していますが、継承で問題が発生しました。GUIクラスとデータクラスをリンクするというクラスがあります
。 GUI またはデータ部分は将来変更される可能性があるため、コードは開いたままにしておく必要があります。そのため、実際の G​​UI/データ クラスへのインターフェイスまたは抽象クラス参照を使用します。 DataHandler
DataHandler

たとえば、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。また、必要なメソッドを
拡張して備えた抽象クラスを使用しようとしました。そのクラスを拡張し、xamlを変更しました(これに続いて)WindowSelectionFrame

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

しかし、VisualStudio ではデザイナーで抽象クラスを使用できないため、うまくいきませんでした。Window私の質問は、メソッドにアクセスしながら、クラスを実装したり、抽象クラスを拡張したりするフレームを作成するにはどうすればよいですか?

4

1 に答える 1

2

あなたはそれをすべて間違っています。

MVVM Patternを使用する必要があるため、WPF UI 要素にインターフェイスを実装する必要はありません。

そのインターフェイスを UI 要素に実装する代わりに、適切な ViewModel を作成してデータとアプリケーション ロジックを保持し、DataBindingを介して UI にバインドします。

于 2013-05-20T18:19:44.107 に答える