WPF ObservableCollection 使用方法


  WPF提供一個強大的類(ObservableCollection )可以簡化我們對界面集合顯示的增刪改操作,並且無刷新,這無疑是對用戶對我們程序員都非常有用的。

  當ObservableCollection<T>添加一行時,會自動通知綁定該ObservableCollection<T>的控件並做相應修改。如果希望當ObservableCollection<T>中的屬性發生改變時通知UI,則T也需要繼承於INotifyPropertyChanged。

  首先聲明實體類

public class Student : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private string _SID;
        public string SID
        {
            get { return _SID; }
            set
            {
                _SID = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("SID"));
                }
            }
        }

        private string _SName;
        public string SName
        {
            get { return _SName; }
            set
            {
                _SName = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("SName"));
                }
            }
        }

        private string _Address;
        public string SAddress
        {
            get { return _Address; }
            set
            {
                _Address = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("SAddress"));
                }
            }
        }
    }

  實體類必須實現PropertyChangedEventHandler 事件這個是更新所需要的

  接下來我們添加一個簡易的界面

  

 <Grid>
        <StackPanel>
            <DataGrid Name="dgStudent" Height="200"  CanUserAddRows="False" MouseLeftButtonUp="dgStudent_MouseLeftButtonUp"></DataGrid>
            <StackPanel >
                <TextBox Name="txtid"></TextBox>
                <TextBox Name="txtname"></TextBox>
                <TextBox Name="txtaddress"></TextBox>
                <Button  Name="btnAdd" Content="添加" Click="btnAdd_Click"></Button>
                <Button  Name="btnUpdate" Content="編輯" Click="btnUpdate_Click"></Button>
                <Button Name="btnDelete" Content="刪除" Click="btnDelete_Click"></Button>
            </StackPanel>
        </StackPanel>
       
    </Grid>

  界面很粗糙,隨意弄得

  下面我們看看實現添加 編輯 刪除的方式

  

public ObservableCollection<Student> datalist = new ObservableCollection<Student>();

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            dgStudent.ItemsSource = datalist;
        }

        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            Student s = new Student();
            s.SID = txtid.Text;
            s.SName = txtname.Text;
            s.SAddress = txtaddress.Text;
            datalist.Add(s);
        }

        private void btnUpdate_Click(object sender, RoutedEventArgs e)
        {
            foreach (var item in datalist)
            {
                if (item.SID == txtid.Text)
                {
                    item.SName = txtname.Text;
                    item.SAddress = txtaddress.Text;
                }
            }
        }

        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            var ca = (Student)this.dgStudent.SelectedItem;
            datalist.Remove(ca);
        }

        private void dgStudent_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            var ca = (Student)this.dgStudent.SelectedItem;
            if (ca != null)
            {
                txtid.Text = ca.SID;
                txtname.Text = ca.SName;
                txtaddress.Text = ca.SAddress;
            }
        }

  這樣就實現的我們對於datagrid的添加刪除修改等操作.比較以前,是不是方便多了。

  我參考了eaglenet 的文章學習的

  http://www.cnblogs.com/zhangjianli/archive/2012/06/01/2529864.html

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM