在Wpf MVVM项目中上传dataGrid

问题描述 投票:0回答:1

这是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;
        }
    }

我不知道如何在单击按钮“ Zmien”之后将新数据从ChildView上传到MainView中的dataGrid。在MainView中,我有dataGrid,我从MainViewModel中从列表中加载数据。单击按钮“ Zmien”后,新数据不会加载到dataGrid中。也许您有办法知道吗?

c# wpf mvvm data-binding datagrid
1个回答
0
投票

摘自我在Codeproject Guide to WPF DataGrid Formatting Using Bindings上的文章:

将数据网格与业务数据连接

即使将DataGrid与业务数据连接起来也不是一件容易的事。基本上,CollectionViewSource用于将DataGrid与业务数据连接:

CollectionViewSource进行实际的数据导航,排序,过滤等。>

<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. 在Windows.Resource中定义CollectionViewSource
  • 这里的陷阱是必须设置CollectionViewType。如果你不会,GridView将使用BindingListCollectionView,不支持排序。当然,MSDN不会在任何地方解释这一点。
  • 将DataGrid的DataContext设置为CollectionViewSource。
  • 在后面的代码中,找到CollectionViewSource并将您的业务数据分配给Source属性
  • 在本文中,仅读取数据。如果用户应该能够编辑数据,请使用ObservableCollection。但是,最好使DataGrid保持只读状态,因为DataGrid中的编辑行为与电子表格程序中的编辑行为不同。如果用户必须双击要更改的行并打开另一个窗口以编辑该实体或添加新实体,则可能会更好。

    © www.soinside.com 2019 - 2024. All rights reserved.