我该如何正确绑定?

时间:2011-11-15 13:41:05

标签: windows-phone-7 binding datacontext inotifypropertychanged

我有一个MyClass类,它实现了INotifyPropertyChanged,并且它有一些必须绑定在某个页面中的属性。在我的页面中我有

private MyClass myclass; 

在页面构造函数中我写

ContentPanel.DataContext = myclass;   

当我将myclass分配给某些MyClass对象时,我从一些回调中获得了该对象,页面中没有显示任何内容。

但是当我编写必须更改的属性而不是page.cs中的MyClass类并绑定它时,它才能正常工作。 或者当我给出

ContentPanel.DataContext = this;

在xaml中我写

{binding this.myclass.property} 

它也可以正常工作。

这是回调

 public void GetCommonInfoCallback(UserCommonInfo userCommonInfo)
    {
        CommonInfo = userCommonInfo;
    }

其中UserCommonInfo是MyClass,CommonInfo是myclass。

 private UserCommonInfo userCommonInfo ;
    public UserCommonInfo CommonInfo
    {
        get
        {
            return userCommonInfo;
        }
        set
        {
            if (userCommonInfo != value)
            {
                userCommonInfo = value;
                OnPropertyChanged("CommonInfo");
            }
        }
    }

我无法理解我的错误在哪里。你能救我吗?

1 个答案:

答案 0 :(得分:2)

设置DataContext时,它是用于数据绑定的MyClass的特定实例。所以执行后

ContentPanel.DataContext = myclass;

你以后可以执行

myclass.someProperty = "new value of someProperty";

并且数据将在绑定控件中更新(假设这不是OneTime绑定,而是OneWay或TwoWay绑定)。

如果我理解你的问题是正确的,你想要更改绑定以使用另一个MyClass实例。

myclass = new MyClass { /* ... */ }; // new instance of MyClass

此时,控件仍然绑定到MyClass的上一个实例。您可以通过更新DataContext来更改它:

DataContext = myclass; // set context to the new MyClass instance

您编写的第二种方法,

ContentPanel.DataContext = this;

表示不同的样式,您将使页面类也充当数据绑定的数据模型实例。

在这种情况下,您不是要更改数据绑定以使用数据模型的新实例(页面实例'this',不会更改)。恕我直言,分离页面和数据模型是非常有价值的,所以我更喜欢不使用DataContext =这种方法。