我在WPF
中遇到了一个奇怪的问题。
我正在做的事情有一个简单的例子:
public class Project
{
private string _title;
public string Title
{
get { return _title; }
set
{
_title= value;
RaisePropertyChanged("Title");
}
}
}
public class People
{
private string _name;
public string Name
{
get { return _name; }
set
{
_name= value
RaisePropertyChanged("Name");
}
}
private Project _project;
public Project Project
{
get { return _project; }
set
{
_project= value;
RaisePropertyChanged("Project");
}
}
}
现在我将一个网格绑定到视图中的People实例,它可以将控件绑定到Project和Name of People类,但我真的无法理解为什么我无法绑定到Project.Title
。
我写这样的XAML
代码:
<TextBox Text="{Binding Name}"/>
<Combobox .... SelectedItem="{Binding Project}"/>
<TextBox Text="{Binding Project.Title}"/>
上面的前两个控件正确绑定,但最后一个TextBox
没有。我不知道为什么它可以访问Project
而不是Project.Title
?这是我在WPF中看到的另一个奇怪的事情!
答案 0 :(得分:1)
也许您的组合框选择未使用Mode=TwoWay
设置所选值:
<Combobox .... SelectedItem="{Binding Project, Mode=TwoWay}"/>
设置Project
后,设置属性,Title
将显示。
答案 1 :(得分:0)
尝试“Path = Project.Title”。 在同一案件中为我工作。
答案 2 :(得分:0)
如果您的DataContext是Person对象的一个实例,它应该可以工作。您可以使用Snoop(http://snoopwpf.codeplex.com/)btw在运行时检查绑定。试一试:)
你也可以
<TextBox DataContext="{Binding Project, Mode=OneWay}" Text="{Binding Title}"/>
答案 3 :(得分:0)
谢谢大家,但问题不在于我的想法。实际上我使用PropertyChanged.Fody将INotifyPropertyChanged
注入属性,但似乎它没有按照我的预期执行。我实现了{ {1}}我自己现在工作正常。