绑定到对象的属性(binding to a property of an object)

2019-07-23 05:05发布

我想在网格中结合一系列文本框转换为对象本身是在我的视图模型(DataContext的)其他财产的性质

CurrentPerson包括NameAge属性

里面的视图模型:

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

XAML:

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

我不知道的方法来使用,我在网格范围内设置另一个DataContext的,没有任何结果,也试过没有任何结果再次设置源和路径像源= CurrentPerson,路径=年龄,这些人进行审判,看看是否会有任何变化与否。

我应该如何实现这一目标?

Answer 1:

请问您Person类成员NameAge提高INPC自己?

如果您想更新任何价值NameAgeViewModel ,并让它在视图中反映,你需要他们提高物业内单独改变Person类为好。

绑定是罚款,但认为是非常不通知从视图模型的变化。 还记得UpdateSourceTrigger一个TextBox默认为LostFocus ,设置,为PropertyChanged将在更新您的字符串ViewModel作为您的打字。

简单的例子:

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 ...
}

现在你的XAML是:

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

或者您也可以通过绑定作为@Kshitij建议

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

并更新视图模型作为您的打字

<StackPanel DataContext="{Binding CurrentPerson}">
  <TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
  <TextBox Margin="15"
            Text="{Binding Age, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>


Answer 2:

试试这个:

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

从本质上讲,你可以通过使用钻取特性. 分隔器。

对于未来的参考,如果你想深入到集合,您可以使用MyCollection[x]就像你在代码中(其中x会被硬编码数, 不是一个变量来代替)。



文章来源: binding to a property of an object