绑定到对象的属性

时间:2013-03-25 08:54:59

标签: c# wpf mvvm binding

我想在网格中绑定 系列文本框对象的属性,这本身就是我的ViewModel中的另一个属性( DataContext的)。

CurrentPersonNameAge属性

组成

在ViewModel中:

public Person CurrentPerson { get; set ... (with OnPropertyChanged)}

Xaml:

<TextBox Text="{Binding Name}" >
<TextBox Text="{Binding Age}" >

我不确定使用的方法,我在网格范围内设置了另一个DataContext,没有任何结果,还尝试设置源和路径,如Source = CurrentPerson,Path = Age再没有任何结果,这些是为审判,看看是否会有任何改变。

我该如何实现这个目标?

2 个答案:

答案 0 :(得分:21)

您的Person班级成员NameAge是否自己提升了INPC?

如果您要更新NameAgeViewModel的值并让它反映在视图中,则需要它们在{{1}内单独更改属性同样也是。

绑定很好但是视图几乎没有通知视图模型的更改。另请注意Person UpdateSourceTrigger默认为TextBox,将其设置为LostFocus会在PropertyChanged中更新您的字符串作为您的输入。

简单示例:

ViewModel

现在你的xaml将是:

public class Person : INotifyPropertyChanged {
  private string _name;
  public string Name {
    get {
      return _name;
    }

    set {
      if (value == _name)
        return;

      _name = value;
      OnPropertyChanged(() => Name);
    }
  }

  // Similarly for Age ...
}

或者您也可以按照@Kshitij

的建议进行绑定
<StackPanel DataContext="{Binding CurrentPerson}">
  <TextBox Text="{Binding Name}" />
  <TextBox Margin="15"
            Text="{Binding Age}" />
</StackPanel>

并在输入时更新视图模型

<StackPanel>
  <TextBox Text="{Binding CurrentPerson.Name}" />
  <TextBox Margin="15"
            Text="{Binding CurrentPerson.Age}" />
</StackPanel>

答案 1 :(得分:14)

试试这个:

<TextBox Text="{Binding CurrentPerson.Name}" />
<TextBox Text="{Binding CurrentPerson.Age}" />

基本上,您可以使用.分隔符深入查看属性。

为了将来参考,如果您想要深入研究集合,您可以像在代码中一样使用MyCollection[x](其中x将被硬编码的数字替换,不是变量< / em>的)。