c# - 绑定(bind)到对象的属性

标签 c# wpf mvvm binding

我想将网格中的一系列文本框绑定(bind)一个对象的属性中,它本身就是我的 ViewModel 中的另一个属性(数据上下文)。

CurrentPersonNameAge 属性组成

ViewModel 内部:

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

Xaml:

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

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

我该如何实现?

最佳答案

您的Person 类(class)成员NameAge 是否自己筹集了INPC?

如果您想更新 ViewModel 中的 NameAge 的值并将其反射(reflect)在 View 中,您需要它们也可以在 Person 类中提高单独更改的属性。

绑定(bind)没问题,但是 View 模型没有通知 View 更改。还请记住 TextBoxUpdateSourceTrigger 默认情况下是 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 的建议进行绑定(bind):

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

并在您输入时更新 View 模型:

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

关于c# - 绑定(bind)到对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15610887/

相关文章:

c# - 单击一次更新到特定版本

c# - 将二进制数据加载到结构中

c# - Wpf 递归绑定(bind)

c# - 为什么在 DataGridTextcolumn 中找不到 ObservableCollection 中实际类的属性,但父类属性是?

c# - MVVM 中的可见性转换器未更新

mvvm - 为什么 DelegateCommand 对 Button 和 MenuItem 的工作方式不同?

c# - 有关 BindingSource 中 Find() 的帮助

c# - 直接调用电话 Xamarin.Forms

WPF DataGrid 显示空双单元格但列标题正确

c# - RichTextBox (WPF) 没有字符串属性 "Text"