0

MVVM とユーザー コントロール イベントと少し混乱しました。

ビューにユーザー コントロールがあります。読み取りと編集の 2 つのモードがあります。(テキストモード)

<Grid
        x:Name="LayoutRoot"
        Background="Transparent">


                <controls:MyUserControl 
                             Mode="{Binding Path=TextMode,Mode=TwoWay}"
                             Text="{Binding Path=ReportText,Mode=TwoWay}"

                </controls:MyUserControl>         

</Grid>

TextMode が 'Edit' に変更されたら、電話アプリケーション バーに '保存' ボタンを追加し、[保存] ボタンをクリックすると、ユーザー コントロールからテキストを保存したいと考えています。また、「読み取り」ビューの保存ボタンを無効にしたいと考えています。(つまり、TextMode が「Read」の場合)

これを行う正しいMVVMの方法は何ですか? 私は2つの方法を考えました:

1) ユーザー コントロールで ModeChanged プロパティを公開してビューに反映し、[保存] ボタンを追加することを考えていました。(しかし、それは MVVM のやり方に反しますか。つまり、コード ビハインドにコードがあるのでしょうか?)。

2) 依存関係プロパティ自体の propertychanged の処理と、ユーザー コントロールからの保存ボタンの追加。(アプリケーションロジックがユーザーコントロールに混在しているため、正しくないようです)

これにビューモデルを含めるにはどうすればよいですか?

MVVMに従うような操作を行う良い方法は何ですか。

4

2 に答える 2

1

ApplicationBar は DependencyObject ではないため、データバインドできません。したがって、この点に関して MVVM の詳細にこだわる意味はありません。

MVVM の目的は、ビジネス ロジックを UI から分離することです。したがって、MVVM はコード ビハインドを宗教的に回避することではありません。実際、危険の 1 つは、コード ビハインドを使用することを恐れて、View Model にあまりにも多くの責任を負わせようとすることです。

最後に考慮すべきことは、全能の MVVM パターンを破ることを選択したとしても、他の人があなたが何をしたかを理解しなければならない場合にのみ問題になるということです。ほとんどの開発チームは、他のすべての可能性を使い果たした (そして 30 分以上を無駄にした) 後、コード ビハインドでコードを探します。ただし、ApplicationBar の場合は、他に配置できる場所はありません。

要するに、最初のオプションに問題はありません。

于 2012-08-16T06:21:07.263 に答える