Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定布尔值_C#_Wpf_Xaml_Binding_Boolean - Fatal编程技术网

C# 绑定布尔值

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中其他位置的资

我一直在从事一个C#4.0 WPF项目,需要弄清楚如何对布尔值进行数据绑定。我有一个对我的应用程序的引用。窗口中的当前对象。我的“App”对象包含一个名为“download”的布尔字段,如果用户已从web服务下载信息,则该字段为true。我需要将文本框的IsEnabled字段数据绑定到此下载值。有什么建议吗?以下是我到目前为止的想法。(非常感谢有助于更好地学习WPF XAML的任何有用链接!)

C#代码:

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}