C# 在Wpf MVVM项目中上载dataGrid

C# 在Wpf MVVM项目中上载dataGrid,c#,wpf,mvvm,datagrid,caliburn.micro,C#,Wpf,Mvvm,Datagrid,Caliburn.micro,以下是ChildViewModel的类: public class ChildViewModel : Screen { private string imie = string.Empty; private string nazwisko = string.Empty; private string wiek = string.Empty; private Person person; private O

以下是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;
        }
    }
公共类ChildViewModel:屏幕
{
私有字符串imie=string.Empty;
私有字符串nazwisko=string.Empty;
私有字符串wiek=string.Empty;
私人;
私人可观察收集人员;
private MainViewModel mainView=新的MainViewModel();
public ChildViewModel(Person-Person,ObservableCollection-PersonCall)
{
这个人=人;
this.personColl=personColl;
this.Wyswietl();
}
公共字符串ImieTxt
{
get=>this.imie;
设置
{
this.imie=值;
this.NotifyOfPropertyChange(()=>this.imieText);
}
}
公共字符串NAZWISKOTT
{
get=>this.nazwisko;
设置
{
this.nazwisko=值;
this.NotifyOfPropertyChange(()=>this.NazwiskoTxt);
}
}
公共字符串WiekTxt
{
get=>this.wiek;
设置
{
this.wiek=值;
this.NotifyOfPropertyChange(()=>this.WiekTxt);
}
}
公共无效Zmien()
{
this.personColl[mainView.DataGridIndex].Imie=this.ImieTxt;
this.personColl[mainView.DataGridIndex].Nazwisko=this.NazwiskoTxt;
this.personColl[mainView.DataGridIndex].Wiek=this.WiekTxt;
this.TryClose();
}
私有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的文章:

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

甚至将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; 

//创建业务数据
var itemList=新列表();
添加(新库存项目{Name=“许多项目”,数量=100,Isobsolite=false});
添加(新库存项目{Name=“足够的项目”,数量=10,Isobsolite=false});
...
//将业务数据链接到CollectionViewSource
CollectionViewSource项目CollectionViewSource;
itemCollectionViewSource=(CollectionViewSource)(FindResource(“itemCollectionViewSource”);
itemCollectionViewSource.Source=itemList;
  • 在Windows.Resource中定义CollectionViewSource
  • 这里的问题是您必须设置CollectionViewType。如果你 否则,GridView将使用BindingListCollectionView,而BindingListCollectionView 不支持排序。当然,MSDN并没有在任何地方解释这一点
  • 将DataGrid的DataContext设置为CollectionViewSource
  • 在代码隐藏中,找到CollectionViewSource并将业务数据分配给Source属性

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

    Hi!也许会有帮助。简言之,集合应位于父集合中,并包含DataGrid行的列表或数据。此集合可以通过以下方式以xaml连接到
    DataGrid
    。xaml在哪里以及如何绑定到它?同时,您的子VM正在创建MainVM!!!!!