2009-09-12 18 views
8

MVVMパターンとPrism 2を実装しようとしたところでWPFアプリケーションがあります。別のUsercontrolから起動されたイベントを購読しているUsercontrolがあります。サブスクリプションコントロール内のいくつかの子要素の表示を切り替えたいと思います。イベントは、データをいくつかの要素に正常にバインドすることができても、適切に起動されます。どのようにVisibilityやスタイルプロパティをViewModelとバインドして動的に変更するのですか?ViewModelからWPFコントロールの可視性を変更する方法

答えて

23

ViewModelにブール値プロパティを設定し、そのプロパティをコントロールのVisibilityプロパティにバインドすることができます。あなたはブール値をasigningされ、Visibilityプロパティは、可視性の列挙値を期待している、あなたは、変換を行うためにBooleanToVisibilityConverterコンバータを使用する必要がありますので、

<Style.Resources> 
    <BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" /> 
</Style.Resources> 

<Image Visibility="{Binding Path=ShowImage, 
        Converter={StaticResource booleanToVisibilityConverter}}"/> 

は、この情報がお役に立てば幸いです。

エセキエルJadib

+0

これは何とか私にとってはうまくいきませんでした。私はUsercontrol.Resourcesセクションにコンバータを宣言し、コメントで説明したようにバインディングを使用しました。 – Raj

+1

私の間違い申し訳ありません。これは機能します。ありがとうございました。 – Raj

8

ブール型プロパティを追加し、値変換の作品を使用しているが、私は、例えば、あなたのViewModelにタイプ可視性のプロパティを追加することをお勧めします

public Visibility ImageVisibility 
{ 
    get { return shouldShowImage ? Visibility.Visible : Visibility.Collapsed } 
} 

この方法の利点は、あなたはそれが10を下回ると、ラベル赤に変わり在庫レベルのための視覚的な方法(例えばに表現したいすべてのプロパティのためのコンバータを記述する必要はありませんですあなたは一度使用するコンバータを持つことができますか、VMのStockLabelBrushプロパティを公開することができます)

+0

この回答はエレガントですが、問題があります。プログラムが 'shouldShowImage'を変更した場合、その変更はビューに送られません。 – James

+1

それは本当ですが、問題を処理する方法はいくつかあります。 'shouldShowImage'から' PropertyChanged'イベントを処理し、新しい 'PropertyChanged'イベントを発生させるか、両方のプロパティのイベントを発生させるラッパープロパティを通じて' shouldShowImage'へのアクセスのみを許可することができます。 – Darren

1

私はこれは古い質問ですが、この問題に遭遇し、この答えを見つける人々のための簡単な解決策があります。あなたのビューモデルで

、そのように "可視" プロパティを作成します。あなたのXAMLで

public Visibility ShowModifyButtons 
    { 
     get { return (Visibility)GetValue(ShowModifyButtonsProperty); } 
     set { SetValue(ShowModifyButtonsProperty, value); } 
    } 
public static readonly DependencyProperty ShowModifyButtonsProperty = 
     DependencyProperty.Register("ShowModifyButtons", typeof(Visibility), typeof(FileMatchViewModel), 
     new UIPropertyMetadata(Visibility.Collapsed)); 

、そのようなことにバインド:今

<Button Focusable="False" Content="Save" Width="100" Margin="10" Visibility="{Binding ShowModifyButtons}"/> 

、あなたのビューモデルから、あなたは必要に応じてShowModifyButtonsVisibility.CollapsedまたはVisibility.Visibleと設定できます。