简体   繁体   English

MVVM从datagrid获得价值

[英]MVVM get value from datagrid

I used MVVM. 我使用了MVVM。

How I can get the selected item from DataGrid ? 如何从DataGrid获取选定的项目?

It is my Model 这是我的模特

Person.cs 人.cs

public class Person : INotifyPropertyChanged
{
   #region Fields

   private string _firstName;
   private string _middleName;
   private string _lastName;
   private DateTime _dateOfBirth;
   private Gender _gender;

   #endregion Fields

   #region Properties

   public string FirstName
   {
      get { return _firstName; }
      set
      {
         if (value == _firstName) return;
         _firstName = value;
         nPropertyChanged();
       }
    }
    public string MiddleName
    {
       get { return _middleName; }
       set
       {
          if (value == _middleName) return;
          _middleName = value;
          OnPropertyChanged();
       }
    }
    public string LastName
    {
    get { return _lastName; }
    set
    {
       if (value == _lastName) return;
       _lastName = value;
       OnPropertyChanged();
    }
 }
 public DateTime DateOfBirth
 {
    get { return _dateOfBirth; }
    set
    {
       if (value.Equals(_dateOfBirth)) return;
       _dateOfBirth = value;
       OnPropertyChanged();
    }
 }
 public Gender Gender
 {
    get { return _gender; }
    set
    {
       if (value == _gender) return;
       _gender = value;
       OnPropertyChanged();
    }
 }

 #endregion Properties

 #region Constructors

 public Person()
 {   
 }

 public Person(string firstName, string middleName, string lastName, DateTime dateOfBirth, Gender gender)
 {
    FirstName = firstName;
    MiddleName = middleName;
    LastName = lastName;
    DateOfBirth = dateOfBirth;
    Gender = gender;
 }

 #endregion Constructors

 #region INotifyPropertyChanged

 public event PropertyChangedEventHandler PropertyChanged;

 //[NotifyPropertyChangedInvocator]
 protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
 {
    var handler = PropertyChanged;
    if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
 }

 #endregion INotifyPropertyChanged

}

   public enum Gender
   {
      Male,
      Female
   }
}

It is my ViewModel 这是我的ViewModel

Ii is PersonsViewModel 我是PersonsViewModel

namespace Learn.MVVM.Example.ViewModels
{
    public class PersonsViewModel<TViewType> : INotifyPropertyChanged, IViewModel where TViewType : IView, new()
    {
        private readonly IView _view;
        private readonly PersonModel _model;

        public ObservableCollection<Person> Persons { get; set; }
        public RelayCommand OkCommand { get; private set; }

        private string _str;

        public PersonsViewModel()
        {
            this._view = new TViewType();
            this._model = new PersonModel();
            this.Persons = new ObservableCollection<Person>(this._model.GetPersons());

            this.OkCommand = new RelayCommand(o => this.OKRun());

            _str = "Кнопка";


            this._view.SetDataContext(this);
            this._view.ShowView();


        }


        public string Str
        {
            get { return _str; }
            set
            {
                if (_str == value)
                    return;
                _str = value;
                OnPropertyChanged("Str");

            }
        }

        public ObservableCollection<Person> Observ
        {
            get { return Persons; }
            set
            {
                if (Persons == value)
                    return;
                Persons = value;
                OnPropertyChanged("Observ");


            }
        }


        public event PropertyChangedEventHandler PropertyChanged;

        //[NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            var handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }


        private void OKRun()
        {
            Str = "Refresh";
            //this.Persons = new ObservableCollection<Person>(this._model.SetPersons());
            this.Observ = new ObservableCollection<Person>(this._model.SetPersons());
            //OnPropertyChanged("Observ");


        }
    }
}

How i can get value current row from datagrid? 我如何从Datagrid获取当前行的值? How i can get index current row from datagrid? 我如何从DataGrid获取索引当前行?

In my experience, a nice method to achieve this is by binding the SelectedItem to a property in your view model: 以我的经验,实现此目标的一种好方法是将SelectedItem绑定到视图模型中的属性:

public Person SelectedPerson { get; set; }

And your DataGrid will look like this: 而且您的DataGrid如下所示:

<DataGrid SelectedItem="{Binding SelectedPerson}" ... >

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM