将类的对象的属性绑定到另一个对象中的属性不起作用

时间:2013-09-10 06:50:53

标签: c# wpf xaml

我在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中看到的另一个奇怪的事情!

4 个答案:

答案 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.FodyINotifyPropertyChanged注入属性,但似乎它没有按照我的预期执行。我实现了{ {1}}我自己现在工作正常。