我先使用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:)