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应更新绑定。
谢谢gehho看这个。我想清楚了,你也没办法获得足够的信息。我从继承自ObservableObject的MainViewModel中的ViewModelBase继承我实现INotifyPropertyChanged。问题是我在两个类中都实现了INotifyPropertyChanged的方法,而WPF却听错了。非常隐晦。很烦人。非常lasjkdf; ashdoh
噢,这很奇怪。但是,那么你应该有一个编译器的警告,不是吗?应该说'PropertyChanged'事件被声明了两次,如果这是有意的,你应该使用'new'关键字,对吗?!或者我在这里错过了什么? – gehho 2010-04-30 06:47:52
Screen类确实包含INotifyPropertyChanged。那么包含的类绑定到datacontext。当我换出SelectedScreen时,INotifyPropertyChanged会被调用。 – 2010-04-28 16:01:57
你有包含类的代码吗? 'Screen'类在这里并不重要,因为正如你指出的那样,它是被改变的'SelectedScreen'属性,而不是'VisualizationTypes'。那么,你可以发布包含类的代码,特别是'SelectedScreen'属性吗?! – gehho 2010-04-29 06:16:14
我更新了代码,以便您可以看到它在做什么。 – 2010-04-29 19:13:48