У меня есть выпадающий связанный с ObservableCollection как:Сложность обновления пользовательского интерфейса при изменении содержимого ObservableCollection?
<ComboBox
HorizontalAlignment="Left" Margin="586,51,0,0" VerticalAlignment="Top" Width="372"
SelectedItem="{Binding PrimaryInsurance.SelectedInsurance}"
ItemsSource="{Binding PrimaryInsurance.AllPatientInsurance}"
ItemTemplate="{StaticResource InsuranceTemplate}" />
Сам ObservableCollection определяется как:
private ObservableCollection<Insurance> _allPatientInsurance;
public ObservableCollection<Insurance> AllPatientInsurance
{
get { return _allPatientInsurance; }
set { if (_allPatientInsurance == value) return; _allPatientInsurance = value; OnPropertyChanged("AllPatientInsurance"); }
}
Теперь страхование инкапсулирует данные, загруженные с базой данных добавляет INotifyPropertyChanged как:
public string CompanyName
{
get { return insurance_View.Companyname; }
set { if (insurance_View.Companyname == value) return; insurance_View.Companyname = value; OnPropertyChanged("CompanyName"); }
}
Где insurance_View - это необработанная запись данных, загружаемая из базы данных.
Все это хорошо.
Однако в ходе операции «Undo», я хотел бы заменить отредактированное insurance_View запись с его оригинальной записью, как:
internal void UnDo()
{
insurance_View = (Insurance_View)pre_edit_Insurance_View.Clone();
}
Хотя сокращенная версия insurance_View правильно изменена обратно к своей первоначальной форме, дисплей не обновляется. Futhermore, заменив отредактированную версию страхования с оригинальной версией страхования в ObservableCollection как:
AllPatientInsurance.Remove(Old Insurance);
AllPatientInsurance.Add(New Insurance);
Уничтожает все привязки и отображает пустую запись.
Итак, что является лучшим способом обновления дисплея при изменении содержимого страхования без разрушения объекта страхования? Есть ли способ лучше?
Редактировать # 1. Чтобы быть ясным, я пытаюсь заменить запись данных в объекте страхования, где объект страхования связан с дисплеем. Я не хочу заменять всю отображаемую коллекцию. Единственное, что приходит на ум - это заменить каждое значение отредактированной записи исходным значением, но это кажется утомительным, поэтому я надеюсь на лучший метод.
Редактировать # 2. Есть ли способ инициировать установки страхования, когда изменяется инкапсулированная запись Insurance_View?
Редактировать # 3. Шаблон страхования:
<!--DataTemplate for the Combobox Insurance List-->
<DataTemplate x:Key="InsuranceTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" />
<ColumnDefinition Width="120" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="14" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="60" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding XNotInEffect}" Grid.Column="0" />
<TextBlock Text="{Binding CompanyName}" Grid.Column="1"/>
<TextBlock Text="{Binding EffectiveDateFrom}" Grid.Column="2"/>
<TextBlock Text="--" Grid.Column="3" />
<TextBlock Text="{Binding EffectiveDateTo}" Grid.Column="4" />
<TextBlock Text="{Binding InsuranceType}" Grid.Column="5"/>
</Grid>
</DataTemplate>
Кроме того, обратите внимание, что просто удаление затем добавить те же результаты объекта страхования в его исчезновения из выпадающего списка выпадающего. Пример:
AllPatientInsurance.Remove(SelectedInsurance);
AllPatientInsurance.Add(SelectedInsurance);
ТИА
Является ли объект страхования imimentInotifyPropertyChanged? –
@StuartSmith да. –