WPF MVVM实体框架 - Datagrid数据绑定

时间:2016-12-29 23:43:02

标签: c# wpf entity-framework mvvm datagrid

我先使用EF 6.1.3 Datebase; WPF App + MVVM Pattern + DataGrid控件。

数据库有一个表:Task,InnerErrand,OutErrand。

表InnerErrand / OutErrand指令基本相同,只是略有不同。表格任务对内部/外部一无所知,它没有内部/外部的键。这就是本质的特殊性。但是这些差事知道他们执行的任务。 Database Tables (MS SQL 问题:每个输出差异都需要显示任务编号,如果有内部指令,也会显示它。

DataGrid有数据绑定到外部差事(OutErrand)

<DataGrid x: Name = "dataGrid" AutoGenerateColumns = "False"
                               ItemsSource = "{Binding CV}"
                               SelectedItem = "{Binding SelectedErrand, Mode = TwoWay, UpdateSourceTrigger = PropertyChanged}"                             
                               >
                         <DataGrid.Columns>
							 <! - Here you can see the out errand O1, O2, O3, O4, etc.  ->
                             <DataGridTextColumn Header = "out errand" Binding = "{Binding Number, Mode = TwoWay}" />
							 <! - Here you can see the task number 1, 2, 3, 4, etc.  ->
                             <DataGridTextColumn Header = "task number" Binding = "{Binding Task.Number, Mode = TwoWay}" />
							 <! - There must be displayed inner errand П1, П2, П3, П4, etc.  ->
                             <DataGridTextColumn Header = "inner errand" Binding = "{Binding Task.InnerErrand.Number, Mode = TwoWay}" />
                         </DataGrid.Columns>
                     </ DataGrid> 
视图模型:

class ErrandViewModel: ViewModelBase
     {
         public ErrandViewModel ()
         {
             dbContext = new MyContext (); 
             LoadErrands ();  
			
			 _cvs = new CollectionViewSource ();
             _cvs.Source = Errands;  // To filter
         }

		  private void LoadErrands ()
         {
             var query = dbContext.OutErrand.ToList ();
             this.Errands = query;
         }
		
         public List <OutErrand> Errands
         {
             get
             {
                 return _errands;
             }
             set
             {
                 _errands = value;
                 NotifyPropertyChanged ();
             }
         }
			
         public OutErrand SelectedErrand
         {
             get
             {
                 return _selectedErrand;
             }
             set
             {
                 _selectedErrand = value;
                 NotifyPropertyChanged ();
             }
         }
        
         public ICollectionView CV
         {
              get
             {
                 return _cvs.View;
             }
             set
             {
                 _cv = value;
                 NotifyPropertyChanged ();
             }
         }
     } // End of class
 } // End namespace 

问题是内部差事没有显示在DataGrid中。

<DataGridTextColumn Header = "inner errand" Binding = "{Binding Task.InnerErrand.Number, Mode = TwoWay}" /> 

根本不起作用。 如果更改SelectedErrand:

public OutErrand SelectedErrand
         {
             get
             {
                 return _selectedErrand;
             }
             set
             {
                 _selectedErrand = value;
                 MessageBox.Show (_selectedErrand.Task.InnerErrand.Select (x => x.Number) .First () ToString ().);
                 NotifyPropertyChanged ();
             }
         } 

然后将数据检索到MsgBox。 告诉我如何更改DataGrid中的绑定,以便工作:) Thanx for all:)

0 个答案:

没有答案