我的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();
首次加载时,绑定似乎有效。我也注意到,当我更改属性时,我绑定到属性的文本框不会更新。但是,当我更改文本框时,该属性肯定会更新,因为该值用作绑定到按钮的命令的基础。随着文本的更改,按钮被正确启用和禁用,当我单击它时,属性中的值是正确的。同样,如果我针对后备存储变量设置了一个值,则在窗口首次加载时会在文本框中显示该值。
答案 0 :(得分:1)
看不出有什么问题,DataContext是否可能被更改,所以绑定会中断? (您只指定路径,因此它相对于当前的DataContext)
答案 1 :(得分:0)
解决了它。我是一个愚蠢的笨蛋:)。
我从另一个类中复制了一些代码,出于某种原因,我将PropertyChanged
事件添加到我的viewmodel接口,而不是在接口上实现INotifyPropertyChanged
。 D'哦!