为什么我的WPF绑定Visibility属性不会更新?

时间:2011-05-05 14:19:22

标签: wpf data-binding

我的XAML中有一个文本块,其中Visibility绑定到我的viewmodel中的属性。当窗口第一次加载时,viewmodel中的值正确地确定了可见性(我试图手动覆盖后备存储变量值,它工作得很好,根据需要隐藏控件)。但是,当我更改属性值时,可见性不会改变。

这是控件的XAML:

<TextBlock Text="Click the button" Style="{StaticResource Message}" Visibility="{Binding NoResultsMessageVisibility}" />

我绑定的“NoResultsMessageVisibility”属性是:

    public Visibility NoResultsMessageVisibility
    {
        get { return _noResultsMessageVisibility; }
        set
        {
            _noResultsMessageVisibility = value;
            NotifyPropertyChanged("NoResultsMessageVisibility");
        }
    }

NotifyPropertyChange使用标准的INotifyPropertyChanged为提供的名称引发PropertyChanged事件。

有人能发现我的错误吗?

修改

回应迄​​今为止的意见/答案。

程序非常简单,因此没有使用并行/多线程。 使用以下窗口加载时,DataContext仅设置一次:

new MainWindow { DataContext = new MainWindowViewModel() }.ShowDialog();

首次加载时,绑定似乎有效。我也注意到,当我更改属性时,我绑定到属性的文本框不会更新。但是,当我更改文本框时,该属性肯定会更新,因为该值用作绑定到按钮的命令的基础。随着文本的更改,按钮被正确启用和禁用,当我单击它时,属性中的值是正确的。同样,如果我针对后备存储变量设置了一个值,则在窗口首次加载时会在文本框中显示该值。

2 个答案:

答案 0 :(得分:1)

看不出有什么问题,DataContext是否可能被更改,所以绑定会中断? (您只指定路径,因此它相对于当前的DataContext)

答案 1 :(得分:0)

解决了它。我是一个愚蠢的笨蛋:)。

我从另一个类中复制了一些代码,出于某种原因,我将PropertyChanged事件添加到我的viewmodel接口,而不是在接口上实现INotifyPropertyChanged。 D'哦!