绑定布尔值

Jim*_*elo 1 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; 
}
Run Code Online (Sandbox Code Playgroud)

XAML:

<TextBox ... IsEnabled="{Binding Source=MyApp, Path=Downloaded}" />
Run Code Online (Sandbox Code Playgroud)

ito*_*son 5

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

你可能想要的是一个多部分路径:

{Binding Path=MyApp.Downloaded}
Run Code Online (Sandbox Code Playgroud)

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

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

另请注意,您必须在App类上实现INotifyPropertyChanged,并为Downloaded属性引发PropertyChanged.