Загрузить dataGrid в проект Wpf MVVM - PullRequest
0 голосов
/ 28 февраля 2020

Вот класс ChildViewModel:

public class ChildViewModel : Screen

    {

        private string imie = string.Empty;
        private string nazwisko = string.Empty;
        private string wiek = string.Empty;
        private Person person;
        private ObservableCollection<Person> personColl;
        private MainViewModel mainView = new MainViewModel();

        public ChildViewModel(Person person, ObservableCollection<Person> personColl)
        {
            this.person = person;
            this.personColl = personColl;
            this.Wyswietl();
        }

        public string ImieTxt
        {
            get => this.imie;

            set
            {
                this.imie = value;
                this.NotifyOfPropertyChange(() => this.ImieTxt);
            }
        }

        public string NazwiskoTxt
        {
            get => this.nazwisko;

            set
            {
                this.nazwisko = value;
                this.NotifyOfPropertyChange(() => this.NazwiskoTxt);
            }
        }

        public string WiekTxt
        {
            get => this.wiek;

            set
            {
                this.wiek = value;
                this.NotifyOfPropertyChange(() => this.WiekTxt);
            }
        }

        public void Zmien()
        {
            this.personColl[mainView.DataGridIndex].Imie = this.ImieTxt;
            this.personColl[mainView.DataGridIndex].Nazwisko = this.NazwiskoTxt;
            this.personColl[mainView.DataGridIndex].Wiek = this.WiekTxt;
            this.TryClose();
        }

        private void Wyswietl()
        {
            this.ImieTxt = this.person.Imie;
            this.NazwiskoTxt = this.person.Nazwisko;
            this.WiekTxt = this.person.Wiek;
        }
    }

Я понятия не имею, как загрузить новые данные из ChildView в dataGrid в MainView, после нажатия кнопки " Zmien ". В MainView у меня есть dataGrid, где из MainViewModel я загружаю данные из списка. После нажатия кнопки " Zmien " новые данные не загружаются в dataGrid.
Может быть, у вас есть идеи, как это сделать?

1 Ответ

0 голосов
/ 29 февраля 2020

Из моей статьи о Codeproject Руководство по форматированию сетки данных WPF с использованием привязок :

Подключение DataGrid к бизнес-данным

Даже подключение DataGrid с бизнес-данными нетривиально. По сути, CollectionViewSource используется для соединения DataGrid с бизнес-данными:

CollectionViewSource выполняет фактическую навигацию, сортировку, фильтрацию данных и т. Д. c.

<Window.Resources>
    <CollectionViewSource x:Key="ItemCollectionViewSource"  CollectionViewType="ListCollectionView"/>
</Window.Resources> 


<DataGrid
  DataContext="{StaticResource ItemCollectionViewSource}"
  ItemsSource="{Binding}"
  AutoGenerateColumns="False"
  CanUserAddRows="False">  


//create business data
var itemList = new List<stockitem>();
itemList.Add(new StockItem {Name= "Many items",      Quantity=100, IsObsolete=false});
itemList.Add(new StockItem {Name= "Enough items",    Quantity=10,  IsObsolete=false});
...

//link business data to CollectionViewSource
CollectionViewSource itemCollectionViewSource;
itemCollectionViewSource = (CollectionViewSource)(FindResource("ItemCollectionViewSource"));
itemCollectionViewSource.Source = itemList; 
  1. Определить CollectionViewSource в Windows .Resource
  2. Гвоздь здесь заключается в том, что вы должны установить CollectionViewType. Если вы этого не сделаете, GridView будет использовать BindingListCollectionView, который не поддерживает сортировку. Конечно, MSDN нигде не объясняет этого.
  3. Установите DataContext из DataGrid в CollectionViewSource.
  4. В приведенном ниже коде найдите CollectionViewSource и назначьте свои бизнес-данные свойству Source

В этой статье данные только читаются. Если пользователь должен иметь возможность редактировать данные, используйте ObservableCollection. Однако часто лучше оставлять DataGrid только для чтения, потому что редактирование в DataGrid ведет себя не так, как в программах для работы с электронными таблицами. Возможно, будет лучше, если пользователь дважды щелкнет по строке, которую он хочет изменить, и откроет другое окно только для редактирования этой сущности или добавления новой.

...