加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c#绑定对象的属性

发布时间:2020-12-15 04:00:56 所属栏目:百科 来源:网络整理
导读:我想将一个网格中的一系列文本框绑定到对象的属性,该对象本身是ViewModel(DataContext)中的另一个属性. CurrentPerson由Name和Age属性组成 在ViewModel内: public Person CurrentPerson { get; set ... (with OnPropertyChanged)} Xaml: TextBox Text="{Bi
我想将一个网格中的一系列文本框绑定到对象的属性,该对象本身是ViewModel(DataContext)中的另一个属性.

CurrentPerson由Name和Age属性组成

在ViewModel内:

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

Xaml:

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

我不确定使用的方法,我在Grid范围内设置另一个DataContext,没有任何结果,还尝试设置源代码和路径,如Source = CurrentPerson,Path = Age,这些是试用看的如果会有任何变化.

我应该如何实现这一点?

解决方法

你的人员类成员名称和年龄是否提高了INPC本身?

如果要在ViewModel中更新“名称”或“年龄”的值,并在视图中反映出来,您需要它们在Person类中单独提高更改属性.

绑定是很好的,但视图几乎没有被通知从视图模型的更改.还要记住,TextBox的UpdateSourceTrigger默认为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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读