【问题标题】:Upload dataGrid in Wpf MVVM project在 Wpf MVVM 项目中上传 dataGrid
【发布时间】:2020-02-28 18:52:18
【问题描述】:

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

【问题讨论】:

  • 嗨!也许this 可能会有所帮助。简而言之,集合应该在父集合中,并且包含 DataGrid 行的列表或数据。此集合可以通过这种方式附加到 xaml 中的 DataGrid&lt;DataGrid ItemsSource="{Binding CollectionName}"/&gt;
  • 您的 xaml 与您的绑定方式在哪里?您的子虚拟机也在创建 MainVM!!!!!!

标签: c# wpf mvvm datagrid caliburn.micro


【解决方案1】:

来自我关于 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 中进行编辑的行为与在电子表格程序中使用的行为不同。如果用户必须双击他想要更改的行并打开另一个窗口来编辑该实体或添加一个新实体,这可能会更好。

【讨论】:

    猜你喜欢
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2013-08-03
    相关资源
    最近更新 更多