C# 绑定布尔值
我一直在从事一个C#4.0 WPF项目,需要弄清楚如何对布尔值进行数据绑定。我有一个对我的应用程序的引用。窗口中的当前对象。我的“App”对象包含一个名为“download”的布尔字段,如果用户已从web服务下载信息,则该字段为true。我需要将文本框的IsEnabled字段数据绑定到此下载值。有什么建议吗?以下是我到目前为止的想法。(非常感谢有助于更好地学习WPF XAML的任何有用链接!) C#代码: XAML:C# 绑定布尔值,c#,wpf,xaml,binding,boolean,C#,Wpf,Xaml,Binding,Boolean,我一直在从事一个C#4.0 WPF项目,需要弄清楚如何对布尔值进行数据绑定。我有一个对我的应用程序的引用。窗口中的当前对象。我的“App”对象包含一个名为“download”的布尔字段,如果用户已从web服务下载信息,则该字段为true。我需要将文本框的IsEnabled字段数据绑定到此下载值。有什么建议吗?以下是我到目前为止的想法。(非常感谢有助于更好地学习WPF XAML的任何有用链接!) C#代码: XAML: WPF无法解析该源。如果要在XAML中指定源,它通常是XAML中其他位置的资
WPF无法解析该源。如果要在XAML中指定源,它通常是XAML中其他位置的资源(例如ObjectDataProvider)。MyApp实际上是来自窗口对象的路径,而不是源本身
您可能需要的是多部分路径:
{Binding Path=MyApp.Downloaded}
但是,您仍然会遇到一些问题:
MyApp是一个私有字段。WPF只允许绑定到属性(它们通常应该是公共的)。因此,将MyApp更改为公共财产
显示的绑定是相对于本地DataContext的,默认情况下,本地DataContext不是窗口。因此,您需要将DataContext设置为窗口(通常是糟糕的样式),将MyApp属性放置在视图模型类上,并将Window.DataContext设置为该视图模型(通常是推荐的样式)或者在绑定上使用RelativeSource或ElementName,使其针对窗口对象而不是DataContext解析路径
请注意,您必须在应用程序类上实现INotifyPropertyChanged,并为下载的属性提升PropertyChanged。WPF无法解析该源。如果要在XAML中指定源,它通常是XAML中其他位置的资源(例如ObjectDataProvider)。MyApp实际上是来自窗口对象的路径,而不是源本身
您可能需要的是多部分路径:
{Binding Path=MyApp.Downloaded}
但是,您仍然会遇到一些问题:
MyApp是一个私有字段。WPF只允许绑定到属性(它们通常应该是公共的)。因此,将MyApp更改为公共财产
显示的绑定是相对于本地DataContext的,默认情况下,本地DataContext不是窗口。因此,您需要将DataContext设置为窗口(通常是糟糕的样式),将MyApp属性放置在视图模型类上,并将Window.DataContext设置为该视图模型(通常是推荐的样式)或者在绑定上使用RelativeSource或ElementName,使其针对窗口对象而不是DataContext解析路径
请注意,您必须在应用程序类上实现INotifyPropertyChanged,并为下载的属性提升PropertyChanged。或将下载作为从属属性实现感谢您的快速响应!我将代码更改为以下内容:class MainWindow:Window{public App MyApp{get{return App.Current as App;}}}}}
,XAML更改为:IsEnabled=“{Binding Path=MyApp.download,RelativeSource={RelativeSource FindAncestor,AncestorType=Window}}”,这非常有效。请让我知道,如果这不是在WPF中这样做的“正确方式”。我喜欢正确地学习东西,而不仅仅是让它们工作。我想我需要在Stackoverflow.com中查找如何添加块!是的,这是一种合理的方法,但是从长远来看,为了“正确的方法”,您应该研究“模型-视图-模型”(MVVM)模式。谷歌和这里有很多链接。但是现在不要挂断——很高兴意识到MVVM是一种可以发展的风格,但不要觉得从第一天开始就必须打破工作代码才能采用它!或者实现作为DependencyProperty下载非常感谢您的快速响应!我将代码更改为以下内容:class MainWindow:Window{public App MyApp{get{return App.Current as App;}}}}}
,XAML更改为:IsEnabled=“{Binding Path=MyApp.download,RelativeSource={RelativeSource FindAncestor,AncestorType=Window}}”,这非常有效。请让我知道,如果这不是在WPF中这样做的“正确方式”。我喜欢正确地学习东西,而不仅仅是让它们工作。我想我需要在Stackoverflow.com中查找如何添加块!是的,这是一种合理的方法,但是从长远来看,为了“正确的方法”,您应该研究“模型-视图-模型”(MVVM)模式。谷歌和这里有很多链接。但是现在不要挂断——很高兴意识到MVVM是一种可以发展的风格,但不要觉得从第一天开始就必须打破工作代码才能采用它!
{Binding Path=MyApp.Downloaded}