WPF内部属性绑定不更新

时间:2010-04-27 23:02:25

标签: wpf

我有一个我已绑定到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属性。因此事件正在触发,但即使第一次绑定正确,文本框也不会更新。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

谢谢gehho看这个。我想通了,你也无法获得足够的信息。我继承自MainViewModel中的ViewModelBase,它继承自ObservableObject,我实现了INotifyPropertyChanged。问题是我在两个类中实现了INotifyPropertyChanged的方法,而WPF正在侦听错误的方法。很晦涩。很烦人。非常lasj​​kdf; ashdoh