为什么我的UI不更新以反映我绑定的数据?
我已经将一些按钮的可见性绑定到了布尔,但是当布尔更改时,按钮的可见性不会改变。为什么会这样呢?为什么我的UI不更新以反映我绑定的数据?
布尔被设置为这样:
public static readonly DependencyProperty editModeToggle = DependencyProperty.Register("editMode", typeof(bool), typeof(Window));
public bool EditMode
{
get { return(bool)GetValue(editModeToggle); }
set { SetValue(editModeToggle, value); }
}
我敢肯定的结合是没有过错的。
[注意:我已经设置了一个可以工作的转换器和绑定工程。能见度只是当我从真更改为false,反之亦然]
绑定并没有改变:
<Button Content="Test" Visibility="{Binding ElementName=mainWindow, Path=EditMode, Converter={StaticResource BooltoVisibilityConverter}/>
相关产权登记是不正确的 -
public static readonly DependencyProperty editModeToggle =
DependencyProperty.Register("editMode", typeof(bool), typeof(Window));
应该是─
public static readonly DependencyProperty editModeToggle =
DependencyProperty.Register("EditMode", typeof(bool), typeof(Window));
通知财产的拼写 - 'E'
应该是资本,因为它的大小写敏感的,你的属性名称不EditMode
editMode
。
哎呀...不错的皮卡。谢谢 – Glowx13 2012-08-15 07:55:35
有你需要检查时绑定不能按预期工作几件事情:
- bool属性是否使用 通知更改INotifyPropertyChanged?
- 你使用转换器从 bool转换为Visibility?
- 您是否在输出 窗口中看到任何绑定错误?
- 你有没有试过在xaml 或bool属性中设置绑定的断点?
正如您在评论中提到的,您尚未实施INotifyPropertyChanged接口。
无论何时ViewModel中的属性值发生变化,都需要实现该接口,因此绑定的方法就知道了。因此,在对每个媒体资源执行INotifyPropertyChanged之后,您将提高其中包含媒体资源名称的PropertyChanged事件。这样,绑定知道该属性的值已更改。
网上有很多文章。这里有一个让你开始的地方:INotifyPropertyChanged and WPF
在这种情况下,你不需要点1从decyclone列表,因为你正在使用一个依赖项属性。我认为如果你没有它,你应该添加Mode = TwoWay来解决它。
是不是,但无论如何感谢! – Glowx13 2012-08-15 07:58:58
1)bool属性是否使用INotifyPropertyChanged通知更改? 2)你使用转换器从布尔转换为可见性? 3)您是否在输出窗口中看到任何绑定错误? 4)你有没有尝试把绑定放在xaml或布尔在布尔属性中的断点? – decyclone 2012-08-15 06:59:29
@decyclone我还没有做第一个......我该怎么做? – Glowx13 2012-08-15 07:00:16
也许“editMode”或者它只是一个错字? – Zabavsky 2012-08-15 07:00:41