2009-08-29 21 views
0

私のSilverlightアプリの簡素化アーキテクチャにより、結合:ユーザーコントロールの可視性のViewModel

  • メインページ。私は2つのプロパティ、
  • MainPage.xamlをでこれらの二つの要素の可視性プロパティにバインドさUserControlVisibleとRectVisible、タイプ可視性の両方を有する、MainViewModelにユーザーコントロールと長方形
  • :MainViewModel
  • メインページへのDataContextセットは2つの要素を有していますMainViewModelがINotifyPropertyChangedのは問題がある

を実施している私はVisibility.CollapsedにMainViewModelでRectVisibleプロパティを設定すると、長方形は罰金である、非表示になりますが、私は、ユーザーコントロール(UserControlVisibleプロパティ)にVisibility.Collapsedを設定すると、それが非表示になりません!
私はそのユーザーコントロールを隠すことができず、私はViewModelクラスを通してそれを行う必要があります。なぜRectangle要素では動作しますが、UserControlでは動作しませんか? XAMLでVisibilityをCollapsedに手動で設定すると、非表示になりますが、コードとViewModelオブジェクトで行う必要があります。

(編集)一時sollution:

私は手動であなたはおそらく、あなたのユーザーコントロールののルートにVisibilityプロパティをバインドする方法を見つける必要がある分離コード

void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    viewmodel=new MainViewModel(); 
    this.DataContext = viewmodel; 
    // fix for binding bug: 
    viewmodel.PropertyChanged += viewmodel_PropertyChanged; 
} 

void viewmodel_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName == "LoginVisible") 
     loginWindowControl.Visibility = viewmodel.LoginVisible; 
} 

答えて

0

にPropertyChangedイベントをサブスクライブビジュアル(グリッド/パネル)。

+0

が試行されましたが、まだバインディングが機能しません。コードビハインドを通じてプロパティを設定したときにのみ非表示になります。 –

+0

バインディング(XAMLのサブセット)のセットアップ方法を共有してください。 –

1

私は同じ問題を抱えていましたが、私はそれを修正しました。私の解決策があなたに役立つかどうかはわかりません。 私の "MainPage"のdatacontextは、私のUserControlのdatacontextとは異なりました。私は手動でXAML を通じて私のUserControlのためのDataContextを設定した 私は例を与える:

<local:myusercontrol DataContext="myusercontroldatacontext" Visibiltiy="{Binding Path=VisibleProperty}"/> 

VisiblePropertyは、この場合はmyusercontroldatacontextに属し、かつなければならないです親XAMLが定義されていないのDataContext

+0

例は素晴らしいかもしれません –

+0

申し訳ありません私はコードブラケットを追加せずにxmlが表示されないことを認識していませんでした。 例をもう一度追加しました。 –