关于绑定的理解,望大神解惑

japan0904 2014-12-16 11:16:45
某一ViewModel类中有一属性(Persons)为Person类,已实现notifyPropertyChanged接口,界面中文本控件Text='{binding Persons.Name}'属性。我更改Persons.Name的值,界面并没有改变,界面中文改变,Persons.Name 却能取到值,我一直不能理解,望大神解惑。
...全文
115 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
japan0904 2014-12-16
  • 打赏
  • 举报
回复
引用 5 楼 duanzi_peng 的回复:
Person 也要,修改成类似2楼的方式。
为什么呀? public Person Persons { set { _selPerson = value; RaisePropertyChanged("SelPerson"); } get { return _selPerson; } } 这样为什么不可以实现?
  • 打赏
  • 举报
回复
Person 也要,修改成类似2楼的方式。
japan0904 2014-12-16
  • 打赏
  • 举报
回复
 public class Person
    {
        private string name;
        private string sex;
        private int age;
        private DateTime birthday;

        public string Name {
            get { return name; }
            set { name = value; }
        }

        public string Sex {
            get { return sex; }
            set { sex = value; }
        }

        public int Age {
            get { return age; }
            set { age = value; }
        }

        public DateTime Birthday {
            get { return birthday; }
            set { birthday = value; }
        }
    }
ViewModel
public class PersonOperateViewModel:ViewModelBase
    {
        private Person _selPerson = new Person();

        public Person Persons {
            set {
                _selPerson = value;
                RaisePropertyChanged("SelPerson");
            }
            get { return _selPerson; }
        }
}
我在ViewModel中更改Persons.Name="123456"反应不到界面上。
japan0904 2014-12-16
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:

Binding Age,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged
try。。。。
界面的变化可以反应到数据源,数据源Persons.Name的改变反应不到界面
  • 打赏
  • 举报
回复
你的Name 也要类似,

 private bool _isSelected = false;
        public bool IsSelected
        {
            get { return _isSelected; }
            set
            {
                _isSelected = value;
                OnChangedProperty("IsSelected");
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnChangedProperty(string name)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }
  • 打赏
  • 举报
回复

Binding Age,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged
try。。。。
  • 打赏
  • 举报
回复
引用 6 楼 japan0904 的回复:
[quote=引用 5 楼 duanzi_peng 的回复:] Person 也要,修改成类似2楼的方式。
为什么呀? public Person Persons { set { _selPerson = value; RaisePropertyChanged("SelPerson"); } get { return _selPerson; } } 这样为什么不可以实现?[/quote] 这样只具体到了类,没有具体到属性。基于“数据驱动”的WPF,早都包含这种“事件通知”的功能。 必须每个属性都使用此方法,不然xaml怎么知道 你修改的是那个值!

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧