0

私はモデルクラスの従業員を持っています:

public class Employee   
{
    public string Id { get; set; }  
    public string Name { get; set; }  
    public string LastName { get; set; }            
}

およびView ModelクラスEmployeeViewModelを含むEmployee Object

public class EmployeeViewModel : INotifyPropertyChanged  
{  
    public EmployeeViewModel()
    {

    }            

    private Employee currentEmployee;

    public Employee CurrentEmployee
    {
        get { return this.currentEmployee; }

        set
        {
            this.currentEmployee = value;
            this.NotifyPropertyChanged("CurrentEmployee");
        }
    }

    //Some code .....
    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

        #endregion
}

ビュー(WPF)はEmployee、ビューモデルのオブジェクトを使用ItemSourceして従業員データを表示します

ここでの問題は、ビューに [更新] ボタンがあり、ビューのEmployeeプロパティを (テキスト ボックスを介して) 変更したときにモデルを更新したい (後でデータベースを更新できるようにするため)、ビューからこのモデルを更新する方法です。 .

4

2 に答える 2

1

私があなたのモデルクラスで何か奇妙なことをチェックしたとき。これは、INotifyPropertyChangedを実装してから、次のように各プロパティのバッキングフィールドを作成する必要があるものです。

モデルクラス

public class Employee:INotifyPropertyChanged
    {
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                _name= value;
                OnPropertyChanged("Name");
            }

        }
          #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion

    }

**ViewModel Class**

 class EmployeeViewModel 
    {
        private IList<Employee> _employees;
        public EmployeeViewModel()
        {
            _employees= new List<Employee>
            {
                new Employee{ID=1, Name ="Emp1"},
                new Employee{ID=2, Name="Emp2"}
            };


        }

        public IList<Employee> Employees
        {
            get
            {
                return _employees;
            }
            set
            {
                _employees= value;
            }
        }

        private ICommand mUpdater;
        public ICommand UpdateCommand
        {
            get
            {
                if (mUpdater == null)
                    mUpdater = new Updater();
                return mUpdater;
            }
            set
            {
                mUpdater = value;
            }
        }

        private class Updater : ICommand
        {
            #region ICommand Members

            public bool CanExecute(object parameter)
            {
                return true;
            }

            public event EventHandler CanExecuteChanged;

            public void Execute(object parameter)
            {

            }

            #endregion
        }

    }

OnPropertyChangedイベント内にロジックを配置できます。このメソッドは、UIに変更を加えるたびに常に呼び出されます

于 2013-01-03T02:01:40.980 に答える
0

ID に基づいてアイテムを検索してObservableCollection変更を使用している場合は、見つかった場合は値を変更します。ListUI 項目がバインドされている場合、行った変更はすべて自動的に UI 項目に影響しObservableCollection、変更されたコレクションを使用して DB レコードを更新します。

于 2013-01-02T12:20:28.543 に答える