1. ホーム
  2. winforms

[解決済み] WindowsフォームのUIデザインパターン(WPFのMVVMのようなもの)

2022-04-24 12:15:08

質問

MVVMはWPFに最適なため、WPFで最もよく使用されます。しかし、Windows Formsではどうでしょうか?Windows Formsにもこのような確立されたよく使われるアプローチ/デザインパターンがあるのでしょうか?Windows Forms で明示的にうまく機能するものは?これをうまく説明している本や記事はないでしょうか? たぶんMVPかMVCベース?

解決方法は?

MVPを試しましたが、ウィンドウズフォームとも相性が良いようです。 この本には、MVPパターンを使ったウィンドウズフォームの例(給与計算アプリケーションのサンプル)が掲載されています。 このアプリケーションはそれほど複雑ではありませんが、どのように作成すればよいかのヒントを与えてくれるでしょう。

C#で学ぶアジャイルの原則、パターン、プラクティス ...

ソースコードは以下から入手できます。 ソースコード

EDIT

MVPパターンには2つのバリエーションがあります。 (a) 受動的なビュー、(b) 監視するコントローラ

複雑なデータバインディングのシナリオでは、私はSupervising Controllerパターンを好んで使用します。 Supervising Controllerパターンでは、データバインディングの責任はビューにあります。 つまり、ツリービューやデータグリッドの場合は、それぞれのビューにあるべきで、ビューに依存しないロジックだけがプレゼンターに移されるべきです。

次のMVPフレームワークを見てみることをお勧めします。 MVC# - MVPフレームワーク

名前に踊らされるな(MVPフレームワークです)。

シンプルなwinformsのMVP動画 Winforms - MVP

ドロップダウンリストを扱う例 MVP - DropDownList

シンプルなツリービューバインディングの例(貧乏人のバインディング)です。BindTree()でツリービュー特有のロジックを追加することができます。

以下はコードスニペットです...テストはしていません、思考から直接キー入力しました...

public interface IYourView
{
   void BindTree(Model model);
}

public class YourView : System.Windows.Forms, IYourView
{
   private Presenter presenter;

   public YourView()
   {
      presenter = new YourPresenter(this);
   }

   public override OnLoad()
   {
         presenter.OnLoad();
   }

   public void BindTree(Model model)
   {
       // Binding logic goes here....
   }
}

public class YourPresenter
{
   private IYourView view;

   public YourPresenter(IYourView view)
   { 
       this.view = view;
   }

   public void OnLoad()
   {
       // Get data from service.... or whatever soruce
       Model model = service.GetData(...);
       view.BindTree(model);
   }
}