2010-04-27 7 views
1

wpf 컨트롤에 바인딩 된 INotifyProperty Screen 항목이 있습니다.WPF Inner 속성 Binding이 업데이트되지 않습니다.

좋아요 ... 나는 모든 것을 단순화하고 더 많은 코드를 게시하고 있습니다. 선택한 스크린 프로퍼티를 가진 MainViewModel이 있습니다.

<TextBlock Text="{Binding Path=SelectedScreen.ScreenNumber}" /> 

이 모두가 처음 작동합니다

public Screen SelectedScreen 
    { 
     get { return this.selectedScreen; } 
     set 
     { 
      this.selectedScreen = value; 
      this.OnPropertyChanged("SelectedScreen"); 
     } 
    } 

나는이 속성에 바인딩 된 텍스트 상자가 있습니다. 다음 코드를 사용하여 선택한 화면을 변경하는 다른 컨트롤을 만들었습니다.

public Screen SelectedScreen 
    { 
     get { return (Screen)GetValue(SelectedScreenProperty); } 
     set 
     { 
      this.SetValue(SelectedScreenProperty, value); 

      for (int x = 0; x < this.Screens.Count; ++x) 
       this.Screens[x].IsSelected = false; 
      value.IsSelected = true; 
     } 
    } 

    public ObservableCollection<Screen> Screens 
    { 
     get { return (ObservableCollection<Screen>)GetValue(ScreensProperty); } 
     set { this.SetValue(ScreensProperty, value); } 
    } 

    public static readonly DependencyProperty SelectedScreenProperty = 
     DependencyProperty.Register("SelectedScreen", 
      typeof(Screen), 
      typeof(ScreenSelection)); 

    public static readonly DependencyProperty ScreensProperty = 
     DependencyProperty.Register("Screens", 
      typeof(ObservableCollection<Screen>), 
      typeof(ScreenSelection), 
      new UIPropertyMetadata(new ObservableCollection<Screen>())); 

이 화면 선택 컨트롤이 작동합니다. SelectedScreen의 set 속성에 스크린을 변경하고 중단 점을 넣으면 MainViewModel의 SelectedScreen 속성을 호출하는 호출됩니다. 따라서 이벤트가 발생하지만 텍스트 상자가 처음 올바르게 바인딩 되더라도 업데이트되지 않습니다.

답변

1

SelectedScreen 속성을 포함하는 클래스가 INotifyPropertyChanged을 구현합니까? SelectedScreen 속성이 변경되면 포함 된 클래스는 PropertyChanged 이벤트를 발생시켜야하며 일반적으로 WPF는 바인딩을 업데이트해야합니다.

+0

Screen 클래스에는 INotifyPropertyChanged가 포함되어 있습니다. 따라서 포함하는 클래스는 datacontext에 바인딩됩니다. SelectedScreen을 바꿀 때 INotifyPropertyChanged가 호출됩니다. –

+0

클래스를 포함하는 코드가 있습니까? 'Screen' 클래스는 중요하지 않습니다. 여러분이 지적한대로'VisualizationTypes'가 아니라'SelectedScreen' 속성이 변경되었습니다. 그래서, 당신은 포함하는 클래스, 특히'SelectedScreen' 속성의 코드를 게시 할 수 있습니까?! – gehho

+0

코드가 무엇인지 볼 수 있도록 코드를 업데이트했습니다. –

0

고맙습니다. 이걸 보니 고맙습니다. 나는 그것을 알아 내었고 당신이 할 수있는 충분한 정보를 가지고있는 방법이 없다. 나는 InotifyPropertyChanged를 구현 한 ObservableObject에서 상속받은 MainViewModel의 ViewModelBase를 상속 받았다. 문제는 두 클래스 모두에서 INotifyPropertyChanged 메서드를 구현하고 WPF가 잘못된 클래스를 청취하고 있다는 것입니다. 아주 애매 하네. 매우 짜증나. Very lasjkdf; ashdoh

+0

오 잘 ... 이상합니다. 그런데 컴파일러 경고가 있어야합니다, 그렇죠? 'PropertyChanged' 이벤트가 두 번 선언되었다고 했어야하고, 이것이 의도적으로 수행 되었다면'new' 키워드를 사용해야합니다. 맞습니까? 아니면 여기에 뭔가 빠졌나요? – gehho

관련 문제