2016-11-10 6 views
-2

私はWPFが新しく、ViewModelはViewと通信していないことを理解しています。私のアプリケーションでMVVMパターンに従おうとしており、ViewModelを使ってViewのボタンを押したいと思います。例:ログインに成功したら、ビューに特定のグリッドを表示したい。これは 'X'ボタンを押すことによっても行うことができます。 'X'ボタンにフォーカスがあると、次のグリッドが表示されます。ViewModelを使用してビュー内のボタンを押す方法

 ..<Grid.Style> 
      <Style TargetType="Grid"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsFocused, ElementName=X}" 
          Value="False"> 
         <Setter Property="Visibility" Value="Collapsed"/> 
        </DataTrigger> 
       <Style.Triggers> 
      </Style> 
     </Grid.Style>.. 

状況を考えれば、どのようにしてこのグリッドをViewModelを使用して表示できますか?

ご協力いただければ幸いです。

答えて

0

Commandをボタンにバインドしてボタンを押すことができます(ICommandタイプのコマンド)。これは、ボタンが押されたが、バックグラウンドで同じ効果を持つことを視覚的に示すものではありません。また、グリッドのIsFocusedプロパティにプロパティをバインドすると、ViewModelのプロパティを変更して可視性を切り替えることができます。

+0

答えをありがとう。ボタンのIsFocusedプロパティを言うことを意味しましたか?存在する場合は、ボタンにIsFocusedプロパティがありません。私はFocusableを使ってみましたが動作しません。私が間違っていることを知っていますか? –

+0

はい、ボタンのIsFocusedを意味します。値を変更するとViewModelが変更され、グリッド上のデータトリガーがトリガーされます。これは、 'X'ボタンのIsFocusedにバインドされているためです。ただし、フォーカス可能なのは、要素にフォーカスできるかどうかを示すプロパティです。 – Andro

0

ボタンのIsFocusedプロパティをビューモデルのプロパティにバインドできます。ユーザーが正常にログインすると、viewmodelのIsFocusedプロパティを適切な値に設定します。

MVVMでは、ViewModelはビューの状態です。あなたは、 "ViewModelはViewとのコミュニケーションがありません"というステートメントは間違っています。ビューとViewModelはバインディングを介して話します。 WPFに組み込まれたBindingsエンジンは非常に強力で、ビジュアルツリーのさまざまな要素にバインドするだけでなく、DataContextのパブリックプロパティにバインドすることができます。 Related Question

希望に役立ちます -

がコードからIsFocusedプロパティを設定する方法については、関連の質問を参照してください。

関連する問題