【问题标题】:Which WPF controls support data binding?哪些 WPF 控件支持数据绑定?
【发布时间】:2011-06-14 18:28:45
【问题描述】:

在某处有清单吗?昨天我花了很多时间试图将 一个 ObservableCollection 绑定到一个 RichTextBox,然后这对 FlowDocument 不起作用(我最终找到了一个简单的解决方法)。如果没有列表,是否有一些智能技巧可以找出?我发现 FlowDocument 不支持到集合的数据绑定真的很奇怪。它有一个显示在 Intellisense 中的 DataContext 属性,所以我认为有某种方法可以绑定一个集合。再加上支持 single item 绑定的事实,让我确信我只是找不到合适的属性。是每个人最终都很难弄清楚这一点,还是我错过了一些明显的东西?

[编辑 - 上面的斜体文本是编辑] 我想我是一个初学者,我什至不知道如何正确地问这个问题。我有一半的答案。我真正想知道的,我现在意识到有两件事。

  1. 如何判断哪些控件可以绑定到集合(下面的答案是任何具有 ItemsSource 属性的控件)

  2. 查看控件时,我如何知道哪些属性是我可以将数据绑定到的依赖属性? (我确实意识到 - 刚刚 - 当我转到浏览器并查看每个属性时,摘要部分会提到哪些属性是依赖属性。单击控件中的每个属性有点费力,但如果这是我可以忍受的最简单的方法)。

【问题讨论】:

    标签: wpf data-binding wpf-controls


    【解决方案1】:

    从 FrameworkElement 派生的任何东西(据我所知,这是每个 WPF 控件)都支持数据绑定。然而,绑定一个集合需要一种特殊类型的绑定。您将需要绑定到 ItemsControl 或使用具有 ItemsSource DependencyProperty 的控件

    【讨论】:

    • OK - 这很有帮助。因此,我可以键入 并在该类型的 ItemsSource 中键入,如果 Intellisense 未显示它,则我无法将集合绑定到该控件。现在,如果我能找到一种同样简单的方法来确定一个属性是否是一个依赖属性。
    【解决方案2】:

    几乎每个属性上的所有 WPF 控件都支持 DataBinding。如果您发布具体示例,我们将能够更好地为您提供帮助。

    【讨论】:

    • 我的具体问题是昨天尝试将集合绑定到 RichTextBox 和 FlowDocument。大家怎么知道那些不支持数据绑定?我如何避免将来在其他不支持它的控件上浪费时间。
    • 它们确实支持 DataBinding。我建议创建一个包含确切详细信息的新帖子 - 它是什么集合,预期输出是什么,您尝试了哪些代码,您在输出窗口中看到了哪些异常,等等。
    • @Tod:在 Visual-Studio 2010 中,您只需键入任何属性,按 F1 即可进入文档页面(否则只需手动访问)。如果有 Dependency Property Information 部分,则它是 DP,例如TextBox.TextItemsControl.Items
    • 感谢您的支持。我实际上有一个separate post on the specific problem,但我想我已经解决了。我在这方面还不够好,无法提出适当的问题。我试图将 ObservableCollection 绑定到 RTB 或 FlowDoc。最终找到了解决方法(如果我可以粘贴到工作中,我会很高兴)。只是想找出如何避免将来出现问题,我想我现在看到了曙光。
    【解决方案3】:

    Data binding is supported on any DependencyProperty.

    • 目标属性必须是依赖属性。大多数 UIElement 属性都是依赖属性,并且大多数依赖属性(只读属性除外)默认支持数据绑定。 (只有 DependencyObject 类型可以定义依赖属性,所有 UIElement 都派生自 DependencyObject。)

    RichTextboxFlowDocument 的情况下,您可以通过.Net 4.0 的Run.Text 依赖属性实现绑定。但请记住RichTextBox

    不支持将文本绑定到 RichTextBox 中包含的 Run 对象。 RichTextBox 内的编辑操作可能会导致绑定被清除。

    您也可以绑定Document 属性,但是,如果您需要其中包含的文本数据,这可能需要一些额外的逻辑。

    【讨论】:

    • XAML 只是声明绑定的一种方式,它对你能不能做没有影响。 (删除那个位)
    • @H.B.谢谢你,先生,这是重写句子的牺牲品。
    • 谢谢,这让我问,我如何找出哪些属性是依赖属性?我可以按 F12 并转到浏览器,但我没有看到任何特殊的字形或从属性列表中分辨哪些是依赖属性的方法。
    • @Tod: H.B.在另一条评论中为您解答。我想我不明白你在问什么,因为粗略浏览RichTextBox 上的属性表明它们都可以绑定,保存只读的。我想你是在问:我怎样才能找出哪些控件可以简单地绑定它们的内容。对于 RTB,您可以通过 Document 属性进行绑定,这很重要(因此,对您没有用处)。
    • 是的,我没有问得很好。我试图将 ObservableCollection 绑定到 RTB。 (我也在学习 MVVM)。在我看来,它确实应该是微不足道的,但我猜 RTB 并非如此。使用 FlowDocument 相当简单,但有点棘手。即使我问得很糟糕,这里的答案也有很大帮助。谢谢大家。
    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 2022-01-24
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多