【问题标题】:WPF TextBox binding to multiple sourcesWPF TextBox 绑定到多个源
【发布时间】:2011-05-25 23:29:56
【问题描述】:

对 WPF 来说相对较新,所以如果我遗漏了一些明显的东西,请多多包涵。我正在窗口底部创建一个描述应用程序状态的“摘要”文本框。我要绑定的属性的代码看起来有点像这样:

public String WindowDescription
{
   get { return (radioButton.IsChecked == true ? "A " : "B ") + NameTextBox.Text 
+ " " + (cbRoute.SelectedItem != null? comboBox.SelectedItem.ToString() : ""); }
}

我已经将它绑定到控件,如下所示:

<TextBox IsEnabled="False" Text="{Binding Path=WindowDescription}"/>

绑定现在根本不起作用 - WindowDescription 中引用的每个控件都有一些默认值,但即使这些值也不会填充 TextBox。就像我说的,我是 WPF 的新手,所以请随时指出我的示例中缺少的任何内容,无论它看起来多么明显。谢谢。

【问题讨论】:

  • 查看你的应用程序的调试输出。是否存在绑定错误?

标签: c# wpf binding


【解决方案1】:

如果我不得不猜测,我猜你没有设置 TextBox 的 DataContext(直接设置,或者在某处为其父母提供设置)。

Binding Path 是相对于元素 DataContext 而言的,默认 DataContext 为 null(而不是元素本身或其包含的 Window)。

【讨论】:

    【解决方案2】:

    有几件事。首先,确保您的 DataContext 设置为包含 WindowDescription 属性的类的实例。

    通常会在页面的代码隐藏中设置它。它也可以在 XAML 中设置,但我不会让我的答案复杂化。

    其次,数据绑定不会自动看到属性值的变化。需要在具有 WindowDescription 属性的类中设置通知系统。

    用 Bing 谷歌“INotifyPropertyChanged”看看。

    否则,请查看此视频!

    http://channel9.msdn.com/blogs/mtaulty/silverlight-databinding-ui-to-net-classes

    卢克

    【讨论】:

    • 这是找出解决方案的关键。我最终创建了一个将属性绑定到每个控件的私有类,并且在每个属性的设置器中,它设置生成字符串的“this.Summary = getSummary()”,然后将其放入 this.Summary 中,其setter 创建了一个 NotifyPropertyChangedEvent,因此每次更改控件时都会更新文本框。谢谢!
    【解决方案3】:

    我猜 Jens 是对的,你设置模型了吗?即

    this.DataContext = model;
    

    你在哪里建模是什么,在我工作的例子中,我们使用 ViewModel 和 MVVM 模式。从长远来看,您可能会研究 Prism 和 Unity 之类的东西,但如果您只是将所有代码放在 XAML 页面的 .cs 文件中,这里就是一个示例。

        namespace DataContextTest
    

    {

    公共部分类 MainWindow : Window { 公共主窗口() { this.DataContext = this; MyString = "你好..."; 初始化组件(); }

    public string MyString { get; set; }
    

    } }

    然后在 XAML 中绑定到 MyString,就像您在另一篇文章中所做的那样,它当然应该再次工作 - 此时没有更改通知。如果您愿意,我可以发布一个示例,但我认为您可以在 Google 上搜索并查看许多简单示例。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多