当XamGrid被反序列化时,IValueConverter不会触发
本文关键字:IValueConverter XamGrid 反序列化 | 更新日期: 2023-09-27 17:49:41
虽然我已经使用c#很多年了,但我必须承认我对WPF + inffragistics控件还是个新手。如果您有任何见解,我很想听听您对以下场景的看法:
- PersistenceManager是为使用XAML的XamGrid配置的。(见[B] Persist Everything)
- 应用程序启动(第一次) XamGrid绑定到数据源
- 绑定包括一个转换器(参见:[a]列绑定)
- 转换器工作正常
- 用户调整
Id
列的大小 - 数据通过:
PersistenceManager.Save(IgPersistenceGroup);
序列化 - 应用程序关闭
- 应用程序启动(第二次)
-
XamGrid
通过:PersistenceManager.Load(IgPersistenceGroup, _persistedData.IgPersistenceMemoryStream);
反序列化 -
XamGrid
绑定到数据源 - 新数据按预期显示
- 转换器的构造函数永远不会被调用,因此,会显示错误的数据
-
Id
列是预期的大小
在这个特殊的情况下,XamGrid
的整个对象树正在被序列化/反序列化。因此,我怀疑我的问题与以下内容有关:
- 正在序列化/反序列化的绑定,或者
- 转换器被引用为
StaticResource
,当应用程序第二次启动时,该引用不再有意义
所以我的问题是:为什么XamGrid
反序列化时IValueConverter
不加载?
实际上,没有必要序列化整个XamGrid
…但那是完全不同的问题。
- inffragistics controls version 12.1.20121.2286
[A]列绑定
<ig:TemplateColumn Key="Severity" HeaderText="Event Severity">
<ig:TemplateColumn.ItemTemplate>
<DataTemplate x:Name="SeverityColumn">
<Image HorizontalAlignment="Center" Width="16" Height="16" Source="{Binding Converter={StaticResource SourceToTargetConverter}}" />
</DataTemplate>
</ig:TemplateColumn.ItemTemplate>
</ig:TemplateColumn>
** SourceToTargetConverter:不是转换器的真实名称-转换器的名称在这里是无关的
[B] Persist Everything
<ig:XamGrid ig:PersistenceManager.PersistenceGroup="{DynamicResource igPG}"
<ig:PersistenceManager.Settings>
<ig:PersistenceSettings SavePersistenceOptions="AllButIgnored" >
<ig:PersistenceSettings.PropertySettings>
<ig:PropertyNamePersistenceInfo PropertyName="FilteringSettings"/>
</ig:PersistenceSettings.PropertySettings>
</ig:PersistenceSettings>
</ig:PersistenceManager.Settings>
引用
- 使用inffragistics控制持久性框架
- 关于fragistics Control Persistence Framework
- MSDN: IValueConverter
当XamGrid
使用ig:PersistenceManager
持久化时,TemplateColumn.ItemTemplate
(又名:SeverityColumn)似乎没有被序列化。结果:
- 当应用程序第一次启动时,从BAML加载
TemplateColumn.ItemTemplate
,并以适当的格式显示列(使用提供的IValueConverter
)。- 注意:您将能够使用Visual Studio的调试器和Watch窗口
查看 - 在当前配置中,当
XamGrid
被反序列化时,ig:PersistenceManager
显式地将TemplateColumn.ItemTemplate
设置为null。- 未格式化数据在列中显示的原因是XamGrid自动退回到
ig:TemplateColumn
的Key
以从DataContext
加载数据
- 未格式化数据在列中显示的原因是XamGrid自动退回到
ItemTemplate
。 更新1
现在我对what有了更好的理解,我可以解释why。以下内容直接摘自Infragistics文档:
"有些类型的属性不会被inffragistics Control Persistence Framework保存。它不保存AttachedProperties, DataTemplates, Paths, ControlTemplates, Styles和ItemPanelTemplates。"
[来源:About inffragistics Control Persistence Framework]