2017-08-29 9 views
-1

私はWPFで多くの作業をしており、しばらくしてMainWindowクラスが混乱して組織化されてしまいます。すべてのコントロールイベントを以下のようなカスタムクラスに格納する方法はありますか?継承は機能しません。新しいクラスのインスタンスがなくなるため、私はそれを推測しています。コントロールイベントのカスタムパスを定義する

public partial class MainWindow : Window 
{ 
    public class ControlEvents : MainWindow //Custom class 
    { 
     private void Abutton_Click(object sender, RoutedEventArgs e) 
     { 
      ...Stuff 
     } 
    } 
} 
+2

イベントコントローラをICommandとして保存し、どこにでも置くことができるMVVMのアプローチを探してください。 – kurakura88

+0

@ kurakura88が言ったように、MVVMはあなたが探しているものです。あなたはWPFを使用することの利点を取っていない。 WPFをWindowsフォームとして使用しています。私はWPFにアプリケーションを移動するのは難しいことを理解していますが、私はあなたが後悔しないと思います。 –

答えて

1

のすべてを保存する方法はあります以下のようなカスタムクラスのコントロールイベント?

いいえ、イベントハンドラ自身要素が定義され、ハンドラがフックアップされているのと同じビュークラスのコードビハインドで定義する必要があります。

あなたはしかし、別のクラスにコード内のイベントハンドラを移動することができ:

public partial class MainWindow : Window 
{ 
    private YourClass _handler = new YourObject(); 
    public class ControlEvents : MainWindow //Custom class 
    { 
     private void Abutton_Click(object sender, RoutedEventArgs e) 
     { 
      _handler.HandleButtonClick(e); 
     } 
    } 
} 

をしかし、あなたはMVVMになります。https://msdn.microsoft.com/en-us/library/hh848246.aspx。これがXAMLベースのUIアプリケーションを開発するための推奨デザインパターンである理由があります。

1

あなたはMVVMを使用しない場合:

あなたがコントロールの領域に対してユーザーコントロールを作成し、メインウィンドウでこのユーザーコントロールを読み込むことができます。

また、 "do stuff"というコードを別のクラスに持ち込み、イベント関数から呼び出すことができます。例えば :

functions.cs

dostuff1() 
{ 
    ... 
} 

dostuff2() 
{ 
    ... 
} 

あなたのUserControl/mainwindow.xaml.cs:

functions f = new functions(); 
    private void Abutton_Click(object sender, RoutedEventArgs e) 
    { 
     f.dostuff1(); 
    } 

幸運

1

すべてのイベントを別ファイルでPartial classに移動することができます。 MainWindowEvents.csなどのファイルを呼び出します。

関連する問題