【发布时间】:2015-08-26 14:49:15
【问题描述】:
我有一个绑定到 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"); }
}
现在 Insurance 封装从数据库下载的数据并添加 INotifyPropertyChanged 为:
public string CompanyName
{
get { return insurance_View.Companyname; }
set { if (insurance_View.Companyname == value) return; insurance_View.Companyname = value; OnPropertyChanged("CompanyName"); }
}
其中 insurance_View 是从数据库下载的原始数据记录。
一切都好。
但是,在“撤消”操作中,我想将已编辑的 insurance_View 记录替换为其原始记录,例如:
internal void UnDo()
{
insurance_View = (Insurance_View)pre_edit_Insurance_View.Clone();
}
虽然 insurance_View 的编辑版本已正确更改回其原始形式,但显示并未更新。此外,在 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);
TIA
【问题讨论】:
-
保险对象是否隐含 INotifyPropertyChanged?
标签: c# wpf xaml data-binding