我有一个我已绑定到wpf控件的INotifyProperty Screen项。
好的...我简化了所有内容并发布了更多代码。我有一个带有所选屏幕属性的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属性。因此事件正在触发,但即使第一次绑定正确,文本框也不会更新。
答案 0 :(得分:1)
包含SelectedScreen
属性的类是否实现INotifyPropertyChanged
?当SelectedScreen
属性发生更改时,包含的类应该引发PropertyChanged
事件,通常,WPF应该更新绑定。
答案 1 :(得分:0)
谢谢gehho看这个。我想通了,你也无法获得足够的信息。我继承自MainViewModel中的ViewModelBase,它继承自ObservableObject,我实现了INotifyPropertyChanged。问题是我在两个类中实现了INotifyPropertyChanged的方法,而WPF正在侦听错误的方法。很晦涩。很烦人。非常lasjkdf; ashdoh