WPF TextBox绑定到多个源

时间:2010-12-15 15:02:40

标签: c# wpf binding

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的新手,所以请随意指出我的例子中遗漏的任何内容,无论它看起来多么明显。感谢。

3 个答案:

答案 0 :(得分:1)

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

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

其次,数据绑定不会自动查看属性值更改。需要使用WindowDescription属性在类中设置通知系统。

谷歌“INotifyPropertyChanged”与Bing见。

否则,请查看此视频!

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

答案 1 :(得分:0)

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

绑定路径是相对于元素DataContext的,默认的DataContext是null(而不是元素本身,或者它包含Window)。

答案 2 :(得分:0)

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

this.DataContext = model;

你建模的地方是什么,在我工作的情况下,我们使用的是ViewModel和MVVM模式。从长远来看,你可能会考虑像Prism和Unity这样的东西,但是如果你只是将所有代码放在.cs文件中用于XAML页面就是一个例子。

    namespace DataContextTest

{

public partial class MainWindow:Window   {     public MainWindow()     {       this.DataContext = this;       MyString =“你好......”;       的InitializeComponent();     }

public string MyString { get; set; }

} }

然后在XAML中绑定到MyString,就像你在另一篇文章中所做的那样,它当然应该再次起作用 - 此时没有变化通知。我可以发布一个例子,如果你愿意,但我认为你可以google它,看到许多简单的例子。

希望这很有帮助。