绑定布尔值

时间:2010-03-15 03:22:28

标签: c# wpf xaml binding boolean

我一直在研究C#4.0 WPF项目,需要弄清楚如何数据绑定布尔值。我在窗口中引用了我的Application.Current对象。我的“App”对象包含一个名为“Downloaded”的布尔字段,如果用户从Web服务下载了信息,则该字段为true。我需要将文本框的IsEnabled字段数据绑定到此Downloaded值。有小费吗?这是我到目前为止所提出的。 (非常感谢任何有用的链接,以更好地学习WPF XAML!)

C#代码:

class MainWindow : Window
{
    private App MyApp = App.Current as App; 
}

XAML:

<TextBox ... IsEnabled="{Binding Source=MyApp, Path=Downloaded}" />

1 个答案:

答案 0 :(得分:5)

WPF无法解析该来源。如果您在XAML中指定Source,它通常是XAML中其他位置的资源(例如ObjectDataProvider)。 MyApp实际上是来自Window对象的路径,而不是源本身。

您可能需要的是多部分路径:

{Binding Path=MyApp.Downloaded}

但是,你仍然会遇到一些问题:

  1. MyApp是一个私人领域。 WPF只允许绑定属性(它们通常应该是公共的)。因此,将MyApp更改为公共财产。
  2. 显示的绑定是相对于本地DataContext的,默认情况下不是Window。因此,您需要将DataContext设置为Window(通常是较差的样式),将MyApp属性放在视图模型类上,并将Window.DataContext设置为该视图模型(通常是推荐的样式)或使用RelativeSource或ElementName绑定使其解析Window对象而不是DataContext的路径。
  3. 另请注意,您必须在App类上实现INotifyPropertyChanged,并为Downloaded属性引发PropertyChanged。