c# - 绑定(bind) boolean 值

标签 c# wpf xaml binding boolean

我一直致力于 C# 4.0 WPF 项目,需要弄清楚如何对 boolean 值进行数据绑定(bind)。我在一个窗口中引用了我的 Application.Current 对象。我的“应用程序”对象包含一个名为“已下载”的 boolean 字段,如果用户已从网络服务下载信息,则该字段为真。我需要将文本框的 IsEnabled 字段数据绑定(bind)到此 Downloaded 值。有小费吗?到目前为止,这是我想出的。 (非常感谢任何有助于更好地学习 WPF XAML 的有用链接!)

C#代码:

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

XAML:

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

最佳答案

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

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

{Binding Path=MyApp.Downloaded}

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

  1. MyApp 是私有(private)字段。 WPF 只允许绑定(bind)到属性(它们通常应该是公共(public)的)。因此,将 MyApp 更改为公共(public)属性(property)。
  2. 显示的绑定(bind)是相对于本地 DataContext 的,默认情况下它不是窗口。因此,您要么需要将 DataContext 设置为 Window(通常样式不佳),将 MyApp 属性放在 View 模型类上并将 Window.DataContext 设置为该 View 模型(通常是推荐样式),要么使用 RelativeSource 或 ElementName绑定(bind)以使其根据 Window 对象而不是 DataContext 解析路径。

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

关于c# - 绑定(bind) boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2444911/

相关文章:

wpf - 链接到表示 3D 模型的自包含 XAML 中的外部纹理文件

wpf - 在用户将数据放入文本框之前,在文本框的焦点上显示工具提示

c# - 如何使用 Entity Framework Core 运行迁移 SQL 脚本

c# - 在 C# 中,为什么在声明 int 时不使用 'new' 关键字?

c# - C#中五个线程之间的时间分片

c# - SQL查询中的if语句?

wpf - wnd.Show(Me) 无法在 WPF 中工作

c# - 未调用 DataTemplate 中的命令

c# - 如何从Facebook获取好友列表? (桌面应用程序)

c# - Xamarin - Prism : How do I pass the whole ViewModel of the ContentPage to a child ContentView