2017-12-14 17 views
0

私はWPFに慣れていないので、私はWinformsでMVVMパターンを試したかったのです。私は、ボタンをクリックすると、APIを介してmsgを取得する非同期メソッドを開始するフォームを持っています。Winforms上のMVVM:無効なボタンを表示することができます(async/awaitを使用)

操作は、ビューモデルで実行されています。ここでは、一部のUI動作を制御するプロパティもあります。ビューモデルはFody Weaver Property Changedを介してINotifyOnPropertyChangedを実装し、ビューモデル自体をDataSourceとして受け取るBindingSourceを持ちます。

BindingSource bsViewModel = new BindingSource(); 
bsViewModel.DataSource = this; // this being the view model the BindingSource lives in 

VMのプロパティは、これは、このグリッチを除いて正常に動作してDataBinding.Addとコントロールのプロパティ()にバインドされています。ボタンのテキストは正しく更新されますが、マウスの上にマウスを置いたとき(または、これらのボタンが配置されているUserControlでRefresh()を呼び出すとき)にのみ、ボタンの色付けが行われます。

同僚は、WinFormsではBindingSource、MVVMでは同じテクニックを使用していますが、非同期待機ではなくBackgroundWorkerを使用しています。彼はその問題を持っていません。彼のボタンは正しく無効になり、無効にするとホバー効果は表示されません。

この半無効ボタンの原因は何ですか?

disabled buttons have hover effect

+0

私はWinformsに問題がなければMVVMを実装しています...あなたが問題を再現できるように、小さなコード例を投稿することができます。 。 – Sievajet

答えて

1

問題はリサイズ自体です。それは、私が気付いていたMVVMのパターンで死に至ることはありませんが、とにかくそのショットを与えたいと思っています。

バックグラウンドワーカーを使用して私の非同期メソッドを試しました。ボタンの問題は同じでした。非同期メソッド/から別のスレッドからビューモデルのプロパティを変更する場合にのみ発生します。

私が気づいたもう一つのことは、ビューモデルのプロパティとデータバインディングを使用して可視性を制御することができないことです。有効なプロパティは、進行状況レポートを使用して設定した場合にのみ機能します。それは哀れみですが、私はWPFをとにかく学びたいと思っています...

関連する問題