MVVMパターンとPrism 2を実装しようとしたところでWPFアプリケーションがあります。別のUsercontrolから起動されたイベントを購読しているUsercontrolがあります。サブスクリプションコントロール内のいくつかの子要素の表示を切り替えたいと思います。イベントは、データをいくつかの要素に正常にバインドすることができても、適切に起動されます。どのようにVisibilityやスタイルプロパティをViewModelとバインドして動的に変更するのですか?ViewModelからWPFコントロールの可視性を変更する方法
8
A
答えて
23
ViewModelにブール値プロパティを設定し、そのプロパティをコントロールのVisibilityプロパティにバインドすることができます。あなたはブール値をasigningされ、Visibilityプロパティは、可視性の列挙値を期待している、あなたは、変換を行うためにBooleanToVisibilityConverterコンバータを使用する必要がありますので、
<Style.Resources>
<BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />
</Style.Resources>
<Image Visibility="{Binding Path=ShowImage,
Converter={StaticResource booleanToVisibilityConverter}}"/>
は、この情報がお役に立てば幸いです。
エセキエルJadib
8
ブール型プロパティを追加し、値変換の作品を使用しているが、私は、例えば、あなたのViewModelにタイプ可視性のプロパティを追加することをお勧めします
public Visibility ImageVisibility
{
get { return shouldShowImage ? Visibility.Visible : Visibility.Collapsed }
}
この方法の利点は、あなたはそれが10を下回ると、ラベル赤に変わり在庫レベルのための視覚的な方法(例えばに表現したいすべてのプロパティのためのコンバータを記述する必要はありませんですあなたは一度使用するコンバータを持つことができますか、VMのStockLabelBrushプロパティを公開することができます)
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}"/>
、あなたのビューモデルから、あなたは必要に応じてShowModifyButtons
〜Visibility.Collapsed
またはVisibility.Visible
と設定できます。
関連する問題
これは何とか私にとってはうまくいきませんでした。私はUsercontrol.Resourcesセクションにコンバータを宣言し、コメントで説明したようにバインディングを使用しました。 – Raj
私の間違い申し訳ありません。これは機能します。ありがとうございました。 – Raj