繁体   English   中英

在 Wpf MVVM 项目中上传 dataGrid

[英]Upload dataGrid in Wpf MVVM project

这是 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中。
也许你知道怎么做?

从我关于 Codeproject Guide to WPF DataGrid Formatting Using Bindings 的文章

将 DataGrid 与业务数据连接起来

甚至将 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
  2. 这里的问题是您必须设置 CollectionViewType。 如果不这样做,GridView 将使用不支持排序的 BindingListCollectionView。 当然,MSDN 并没有在任何地方解释这一点。
  3. 将 DataGrid 的 DataContext 设置为 CollectionViewSource。
  4. 在后面的代码中,找到 CollectionViewSource 并将您的业务数据分配给 Source 属性

在本文中,仅读取数据。 如果用户应该能够编辑数据,请使用 ObservableCollection。 但是,让 DataGrid 保持只读状态通常更好,因为在 DataGrid 中编辑的行为与在电子表格程序中使用的行为不同。 如果用户必须双击他想要更改的行并打开另一个窗口来编辑该实体或添加新实体,这可能会更好。

暂无
暂无

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

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