WPF内部属性绑定不更新

WPF内部属性绑定不更新

问题描述:

我有一个INotifyProperty屏幕项目,我已经绑定到WPF控制。WPF内部属性绑定不更新

好的...我简化了一切,发布了更多的代码。我有一个MainViewModel与选定的屏幕属性。

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

我有一个绑定到该物业的文本框:

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

这一切工作开始。我创建了另一个控件,使用以下代码更改所选屏幕。

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属性。所以事件正在触发,但即使第一次正确绑定,文本框也不会更新。

包含SelectedScreen属性的类是否实现INotifyPropertyChanged?当SelectedScreen属性更改时,包含的类应引发PropertyChanged事件,并且通常WPF应更新绑定。

+0

Screen类确实包含INotifyPropertyChanged。那么包含的类绑定到datacontext。当我换出SelectedScreen时,INotifyPropertyChanged会被调用。 – 2010-04-28 16:01:57

+0

你有包含类的代码吗? 'Screen'类在这里并不重要,因为正如你指出的那样,它是被改变的'SelectedScreen'属性,而不是'VisualizationTypes'。那么,你可以发布包含类的代码,特别是'SelectedScreen'属性吗?! – gehho 2010-04-29 06:16:14

+0

我更新了代码,以便您可以看到它在做什么。 – 2010-04-29 19:13:48

谢谢gehho看这个。我想清楚了,你也没办法获得足够的信息。我从继承自ObservableObject的MainViewModel中的ViewModelBase继承我实现INotifyPropertyChanged。问题是我在两个类中都实现了INotifyPropertyChanged的方法,而WPF却听错了。非常隐晦。很烦人。非常lasj​​kdf; ashdoh

+0

噢,这很奇怪。但是,那么你应该有一个编译器的警告,不是吗?应该说'PropertyChanged'事件被声明了两次,如果这是有意的,你应该使用'new'关键字,对吗?!或者我在这里错过了什么? – gehho 2010-04-30 06:47:52