1. ホーム
  2. .net

[解決済み】WPFでMVVMを使ったダイアログの扱いについて

2022-04-02 04:20:59

質問

WPFのMVVMパターンでは、ダイアログの扱いはより複雑な操作のひとつです。 ビューモデルはビューについて何も知らないので、ダイアログ通信は興味深いものになります。 私は ICommand を起動すると、ダイアログが表示されます。

どなたか、ダイアログからの結果を処理する良い方法をご存じないでしょうか?私は、次のようなウィンドウズダイアログについて話しています。 MessageBox .

この方法の一つは、ダイアログが必要なときにビューが購読するイベントを viewmodel に設定することです。

public event EventHandler<MyDeleteArgs> RequiresDeleteDialog;

これはOKですが、ビューにコードが必要ということで、これは避けたいところです。

解決方法は?

1990年代のモーダルダイアログをやめて、コントロールをオーバーレイとして実装し(canvas+絶対位置)、VMに戻ってブーリアンに可視性を関連付けることを提案します。ajaxタイプのコントロールに近いものです。

これはとても便利ですね。

<BooleanToVisibilityConverter x:Key="booltoVis" />

のように

<my:ErrorControl Visibility="{Binding Path=ThereWasAnError, Mode=TwoWay, Converter={StaticResource booltoVis}, UpdateSourceTrigger=PropertyChanged}"/>

ユーザーコントロールとして実装しているものはこんな感じです。x」をクリックすると、usercontrolのコードの後ろにある行でコントロールが閉じられます。(私はViewsを.exeで、ViewModelsをdllで持っているので、UIを操作するコードについて悪い気はしません)。