首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Wpf MVVM项目中的dataGrid上传

Wpf MVVM项目中的dataGrid上传
EN

Stack Overflow用户
提问于 2020-02-28 10:52:18
回答 1查看 56关注 0票数 0

下面是ChildViewModel的类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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上传新数据到dataGrid in MainView。在MainView中,我有dataGrid,在MainViewModel中,我从列表中加载数据。单击"Zmien“按钮后,dataGrid中不会加载新数据。

也许你知道怎么做?

EN

回答 1

Stack Overflow用户

发布于 2020-02-28 19:14:35

来自我关于Codeproject 使用绑定的WPF DataGrid格式化指南的文章

将DataGrid与业务数据连接起来

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

CollectionViewSource执行实际的数据导航、排序、过滤等操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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. 将DataGrid的DataGrid设置为CollectionViewSource。
  4. 在后面的代码中,找到CollectionViewSource并将业务数据分配给Source属性

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60457652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文