2009-08-29 4 views
0

내 실버 라이트 응용 프로그램의 단순화 된 아키텍처를 통해 바인딩 :UserControl을 가시성은 뷰 모델

  • MainPage; 나는이 두 가지 속성,
  • 에서 MainPage.xaml에서 두 요소의 가시성 속성에 바인더 제본 UserControlVisible 및 RectVisible 입력 가시성을 모두 가지고, MainViewModel에 UserControl을하고 사각형
  • : MainViewModel
  • MainPage에 DataContext를 설정 두 가지 요소가 있습니다 MainViewModel는에서 INotifyPropertyChanged이

문제는 내가 Visibility.Collapsed에 MainViewModel에서 RectVisible 속성을 설정할 때, 사각형은 숨 깁니다, 괜찮있는,하지만 난 UserControl을 (UserControlVisible 속성)에 Visibility.Collapsed를 설정할 때, 그것은 숨 깁니다 적이있다을 구현했습니다!
해당 사용자 정의 컨트롤을 숨길 수 없으며 ViewModel 클래스를 통해이를 수행해야합니다. UserControl과 함께 Rectangle 요소와 함께 작동하는 이유는 무엇입니까? XAML에서 Visibility를 Collapsed로 수동 설정하면 숨김 상태가되지만 코드 및 ViewModel 객체를 통해이를 수행해야합니다.

(편집) 임시 sollution :

내가 수동으로 코드 숨김으로하여 PropertyChanged 이벤트에

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

당신은 가능성이 사용자 컨트롤의 루트에 Visibility 속성을 바인딩 할 수있는 방법을 찾을 필요가 가입 비주얼 (그리드/패널).

+0

시도했지만 여전히 바인딩이 작동하지 않습니다. codebehind를 통해 속성을 설정할 때만 숨겨집니다. –

+0

바인딩 (XAML의 하위 집합)을 설정하는 방법을 공유하도록 신경을 씁니까? –

1

나는 동일한 문제가 있었는데, 해결했고 내 솔루션이 당신을 위해 작동하는지 모르겠습니다. "MainPage"의 datacontext가 UserControl의 datacontext와 다릅니다. 내가 수동으로 XAML 를 통해 내 UserControl을위한 데이터 컨텍스트를 설정했다 나는 예를 줄 것이다 :

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

VisibleProperty이 경우는 myusercontroldatacontext에 속하고해야되는 부모 XAML이 정의되지 않은 DataContext를

+0

예제가 좋을 것입니다 –

+0

죄송합니다. xml이 코드 브래킷을 추가하지 않으면 나타나지 않을 것이라는 것을 몰랐습니다. 예제를 다시 추가했습니다. –