比如
class MyClass : ObservableCollection<EmployeeInfo>
{
... 
}
MyClass cls = new MyClass();
数据填充完毕后...
this.DataContext = cls;xaml里
<TextBlock Text="{Binding Path=XXX}" />TextBlock里不显示数据。为什么?或者说应该怎样写.

解决方案 »

  1.   

    试了,没问题。
    // Class1.cs
    class Class1 : System.ComponentModel.INotifyPropertyChanged
    {
            private string name;
            public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;        public string Name
            {
                get { return name; }
                set { 
                    name = value;
                    OnPropertyChanged("Name");
                }
            }
            private int age;        public int Age
            {
                get { return age; }
                set { 
                    age = value;
                    OnPropertyChanged("Age");
                }
            }        private void OnPropertyChanged(string strProperty)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(strProperty));
                }
            }        public Class1(string name, int age)
            {
                this.name = name;
                this.age = age;
            }
    }// Class2.csclass Class2 : System.Collections.ObjectModel.ObservableCollection<Class1>
    {
            public Class2()
            {
                Add(new Class1("name1", 1));
                Add(new Class1("name2", 2));
                Add(new Class1("name3", 3));
                Add(new Class1("name4", 4));
                Add(new Class1("name5", 5));        
            }
    }
    ======从Expression Blend打开这个项目,在Project标签下点击+CLR Object,选择Class2,然后把Class2拖到Window界面上,提示用什么表示数据,可以选择ListBox...
    然后,右键选择生成的ListBox,'Edit Other Templates'->'Edit Generated Items'->'Edit Template'做一些格式化操作。当然,在Expression Blend上的操作可以省掉,直接new一个Collection,然后指定DataContext.
      

  2.   

    你绑定的是一个Collection,不是一个元素。
      

  3.   

    总结:如果想从代码中访问并初始化Class2对象时(也就是用Blend +CLR Object操作在xaml中初始化该对象),可以用如下代码初始化.ObjectDataProvider provider = this.Resources["MyResourceKey"] as ObjectDataProvider;
    Class2 cls2 = provider.ObjectInstance as Class2;cls2.Add(new Class1("name", 32));