Используя EF 4.1, я добавил интерфейс INotifyPropertyChanged, чтобы уведомлять мое представление об изменении свойств.
public class Department : INotifyPropertyChanged
{
public Department()
{
this.Courses = new ObservableCollection<Course>();
}
// Primary key
public int DepartmentID { get; set; }
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
// Navigation property
public virtual ObservableCollection<Course> Courses { get; private set; }
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class Course : INotifyPropertyChanged...
В сценарии Master Detail у меня есть комбинация поиска, чтобы изменить Отдел:
Когда реализуется INotifyPropertyChanged, свойство отдела не будет обновляться, но при удалении реализации INotifyPropertyChanged из класса Department и Course это будет сделано:
XAML
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DataGrid
AutoGenerateColumns="False"
EnableRowVirtualization="True"
Height="173"
HorizontalAlignment="Left"
ItemsSource="{Binding CourceViewSource}"
x:Name="departmentDataGrid"
RowDetailsVisibilityMode="VisibleWhenSelected"
VerticalAlignment="Top"
Width="347">
<DataGrid.Columns>
<DataGridTextColumn x:Name="CourseID" Binding="{Binding Path=CourseID}"
Header="CourseID" Width="SizeToHeader" />
<DataGridTextColumn x:Name="nameColumn" Binding="{Binding Path=Title}"
Header="Title" Width="SizeToHeader" />
<DataGridTextColumn x:Name="nameColumnw" Binding="{Binding Path=Department.Name}"
Header="Department" Width="SizeToHeader" />
</DataGrid.Columns>
</DataGrid>
<ComboBox Grid.Row="1"
ItemsSource="{Binding DepartmentLookUp}"
SelectedItem="{Binding CourceViewSource/Department}" />
<Button Grid.Row="2" Content="Save" Click="Button_Click"/>
</Grid>
Код позади
...
private SchoolEntities _context = new SchoolEntities();
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
public ICollectionView CourceViewSource { get; private set; }
public ICollectionView DepartmentLookUp { get; private set; }
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
_context.Departments.Load();
_context.Courses.Load();
DepartmentLookUp = new ListCollectionView(_context.Departments.Local);
CourceViewSource= new ListCollectionView(_context.Courses.Local);
RaisePropertyChanged(() => DepartmentLookUp);
RaisePropertyChanged(() => CourceViewSource);
}
...
Я включил образец проблемы здесь .
При выборе отдела в деталях, отдел в мастере не обновляется, при изменении% кредита на мастере обновляются данные о кредитах.!
Теперь изменим SchoolModel.cs, чтобы класс Notify не реализовывал интерфейс INotifyPropertyChanged (открытый класс Notify //: INotifyPropertyChanged):
При выборе Отдела в деталях обновляется Отдел в Master DO, при изменении Кредитного% на мастере Кредиты по детали НЕ обновляются.
Я не понимаю, может быть, чего-то не хватает, чтобы заставить обоих работать?