2013-10-14 28 views
5

MVVMシナリオでは、ハイパーリンクのクリックまたはイメージクリックに基づいてユーザーコントロールを表示/非表示にしたいとします。これはXAMLでどのように達成できますか?wpf mvvmでスタックパネルを非表示/表示する方法

+0

[データバインド](http://msdn.microsoft.com/en-us/library/ms750612.aspx)[ '可視性'](http://msdn.microsoft.com/en-us/library/system.windows.uielement.visibility(v = vs. 95).aspx)プロパティを、BoolToVisibiltyConverterを使用してVMのbooleanプロパティに設定します。 –

+1

いいえ私の意見では、ここでViewModelのプロパティを定義する必要があります。 XAMLでのみ行う方法については、私の答えを参照してください。 – Marc

+0

@mark、あなたのリンクを見ることができませんでした – SNS

答えて

4

バインドビューモデルのブール値プロパティにVisibilityプロパティは、BooleanToVisibilityConverter

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="visibilityConverter" /> 
</Window.Resources> 

... 

<MyUserControl Visibility="{Binding IsMyUserControlVisible, Converter={StaticResource visibilityConverter}}" /> 

を使用してのViewModel:

private bool _isMyUserControlVisible; 
public bool IsMyUserControlVisible 
{ 
    get { return _isMyUserControlVisible; } 
    set 
    { 
     _isMyUserControlVisible = value; 
     OnPropertyChanged("IsMyUserControlVisible"); 
    } 
} 
0

は、あなたがいるか否かを判断し、あなたのViewModelのbooleanプロパティを持っていると言いますコントロールを表示する

public bool DisplayControl { get; set; } 

BooleanToVisibiltyConverter

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="visibilityConverter" /> 
</Window.Resources> 

そして、あなたのコントロールを使用してStackPanelのvisibiiltyをバインドします

<StackPanel Visibility="{Binding DisplayControl, Converter={StaticResource visibilityConverter}}"/> 
+0

私は '' InotifyPropertyChanged'について言及していませんでした。データが変更されるたびにビューを更新するために「DisplayProperty」を使用します。 –

13

は、トグルボタンを使用してBooleanToVisibilityConverterを使用してUserControlの可視性をバインド:

は、リソースを定義します:

<BooleanToVisibilityConverter x:Key="BoolToVisibility" /> 

トグルボタン:

<ToggleButton x:Name="VisibilityToggle> 
    <Image Source="..." /> 
</ToggleButton> 

ユーザーコントロール:

<MyControl Visibility="{Binding IsChecked, ElementName=VisibilityToggle, Converter={StaticResource BoolToVisibility}}" /> 
+0

ありがとうございます。出来た。私はスタイルでトグルボタンの外観を変更したいと思います。それは可能です – SNS

+0

もちろん、他のコントロールと同様にToggleButtonをスタイルすることができます。答えが問題を解決した場合は、それを受け入れて、問題を解決するのに役立つ他のすべての答えをupvote ... – Marc

関連する問題