为什么我的UI不更新以反映我绑定的数据?

为什么我的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}/> 
+0

1)bool属性是否使用INotifyPropertyChanged通知更改? 2)你使用转换器从布尔转换为可见性? 3)您是否在输出窗口中看到任何绑定错误? 4)你有没有尝试把绑定放在xaml或布尔在布尔属性中的断点? – decyclone 2012-08-15 06:59:29

+0

@decyclone我还没有做第一个......我该怎么做? – Glowx13 2012-08-15 07:00:16

+1

也许“editMode”或者它只是一个错字? – Zabavsky 2012-08-15 07:00:41

相关产权登记是不正确的 -

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'应该是资本,因为它的大小写敏感的,你的属性名称不EditModeeditMode

+0

哎呀...不错的皮卡。谢谢 – Glowx13 2012-08-15 07:55:35

有你需要检查时绑定不能按预期工作几件事情:

  1. bool属性是否使用 通知更改INotifyPropertyChanged?
  2. 你使用转换器从 bool转换为Visibility?
  3. 您是否在输出 窗口中看到任何绑定错误?
  4. 你有没有试过在xaml 或bool属性中设置绑定的断点?

正如您在评论中提到的,您尚未实施INotifyPropertyChanged接口。

无论何时ViewModel中的属性值发生变化,都需要实现该接口,因此绑定的方法就知道了。因此,在对每个媒体资源执行INotifyPropertyChanged之后,您将提高其中包含媒体资源名称的PropertyChanged事件。这样,绑定知道该属性的值已更改。

网上有很多文章。这里有一个让你开始的地方:INotifyPropertyChanged and WPF

+0

考虑到布尔属性是窗口类的一部分,你如何建议我实现INotifyPropertyChanged? – Glowx13 2012-08-15 07:45:46

+0

好吧,对于依赖属性,你不需要那个。您是否尝试过直接在绑定上以及在* BooltoVisibilityConverter *的方法中放置断点? – decyclone 2012-08-15 07:56:53

+0

它最终只是一个我找不到的拼写错误...谢谢! – Glowx13 2012-08-15 07:58:30

在这种情况下,你不需要点1从decyclone列表,因为你正在使用一个依赖项属性。我认为如果你没有它,你应该添加Mode = TwoWay来解决它。

+0

是不是,但无论如何感谢! – Glowx13 2012-08-15 07:58:58