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的新手,所以请随意指出我的例子中遗漏的任何内容,无论它看起来多么明显。感谢。
答案 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它,看到许多简单的例子。
希望这很有帮助。