2017-06-02 13 views
1

最近、私と私の同僚は、viewModelにある可視性プロパティへのビューのバインディングについて議論しています。viewmodelの可視性にバインドするのは良い設計ですか?

私たちのプロジェクトの1つでは、私の同僚がvisibilityプロパティにバインドされたコントロールを表示/折りたたむために、必要に応じてviewModelはプロパティをVisibility.Visible/Visibility.Collapseに設定します。

それは機能しますが、私はそれが良いデザインであることを知りたいと思います。

viewModelがプロパティをVisible/collapseに設定している場合、viewModelはどのビューが行っているかを知っていますが、boolプロパティを含む必要があり、ビューはboolプロパティにバインドし、要素を表示/非表示にするかどうかを決定します。この場合、viewmodelはビューについて何も知らない。

例: ユーザーがチーム実装するほうがよい方法

private bool _isUserBelongsToTeam; 
public bool IsUserBelongsToTeam 
{ 
    get { return _isUserBelongsToTeam; } 
    set { _isUserBelongsToTeam = value; NotifyPropertyChange("IsUserBelongsToTeam"); } 
} 

XAML: 
<TextBlock Text= "Team name" Visibility= "{Binding IsUserBelongsToTeam, Converter={StaticResource BoolToVisibilityConverter}}" /> 

private bool _isTeamVisible; 
public bool IsTeamVisible 
{ 
    get { return _isTeamVisible; } 
    set { _isTeamVisible= value; NotifyPropertyChange("IsTeamVisible"); } 
} 

XAML: 
<TextBlock Text= "Team name" Visibility= "{Binding IsTeamVisible}" /> 

に属する場合のTextBlock(チーム名)を示しますか?

+0

役に立つ答えをupvoteすることを忘れないでください:) https://stackoverflow.com/help/privileges/vote-up – mm8

答えて

0

本当に味の問題です。私は個人的にはほとんどの場合コンバータの方法を好みます。ビューモデルプロパティをboolとして定義する利点は、どのビュー関連タイプにも依存しないことです。

これは、複数の異なる種類のクライアントアプリケーション間でビューモデルを共有する(または共有する)場合に特に重要です。

MVVMに関する限り、ビューモデルクラスにVisibilityプロパティを追加することで、実際にパターンを破ることはありません。また、多くのビューモデルインスタンスをItemsControlに表示する場合は、パフォーマンス上の理由からコンバーターを使用するよりも実際には良いかもしれません。

+0

はあなたMM8をありがとうございます。これは私を明確にします。 1つのビューと1つのviewModelの場合は、可視性、多くのビュー、および1つのビューモデルがブール値を持つことをお勧めします。 – JSR

+0

はい、またはむしろ、多くのビューモデルオブジェクトを作成してこれらにバインドする場合は、コンバータを使用したくない。 – mm8

1
  1. コードを読んでから、書くのに多くの時間を費やしています。したがって、「IsTeamMember」は「IsTeamVisible」よりも優れた名前です。そしてIsUserBelongsToTeamはひどい(文法的ではない):)

  2. 私はWPFアプリケーションでモジュール全体を書き直しました。私は単一の 'IsXYZVisible'プロパティを使用しませんでした。私はDataTemplatesでContentPresenterを使用しています。コンテンツを表示したくないときは、ContentPresenterのContentプロパティをnullにしています。この方法では、単純なxaml、より単純で小さなビューモデル、コードがビューをよりよく反映します(デバッグ中にXYZサブビューモデルプロパティがnullの場合、レンダリングされていないことがわかります。 IsXYZVisibleまたは同様のプロパティを検索するために)、ユニットテストは簡単です。

関連する問題