C# 当XamGrid被反序列化时,IValueConverter不会激发
虽然我已经在C#工作了很多年,但我必须承认我对WPF+基础设施控制是新手。如果您有任何见解,我很想听听您对以下场景的想法:C# 当XamGrid被反序列化时,IValueConverter不会激发,c#,wpf,xaml,data-binding,infragistics,C#,Wpf,Xaml,Data Binding,Infragistics,虽然我已经在C#工作了很多年,但我必须承认我对WPF+基础设施控制是新手。如果您有任何见解,我很想听听您对以下场景的想法: PersistenceManager是使用XAML为XamGrid配置的。(见:[B]坚持一切) 应用程序启动(第一次) XamGrid已绑定到数据源 绑定包括一个转换器(请参阅:[a]列绑定) 转换器按预期工作 用户调整Id列的大小 数据通过以下方式序列化:PersistenceManager.Save(IgPersistenceGroup) 申请关闭 应用程序已启动(第
Id
列的大小PersistenceManager.Save(IgPersistenceGroup)代码>
XamGrid
通过以下方式反序列化:PersistenceManager.Load(IgPersistenceGroup,_persistencedata.IgPersistenceMemoryStream)代码>
XamGrid
已绑定到数据源Id
列是预期的大小XamGrid
的整个对象树正在被序列化/反序列化。因此,我怀疑我的问题与以下方面有关:
静态资源
,当应用程序第二次启动时,该引用不再有意义XamGrid
被反序列化时,IValueConverter
为什么不加载
实际上,不需要序列化整个XamGrid
。。。但这是一个完全不同的问题
附加上下文
- 基础设施控制版本12.1.20121.2286
<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>
<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>
**SourceToTargetConverter:不是转换器的真实名称-转换器的名称在此处不相关
[B]坚持一切
<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>
<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>
使用ig:PersistenceManager
持久化XamGrid
时,似乎没有序列化TemplateColumn.ItemTemplate
(也称为SeverityColumn)。因此:
当应用程序第一次启动时,将从BAML加载TemplateColumn.ItemTemplate
,并以适当的格式显示该列(使用提供的IValueConverter
)。
- 注意:您将能够使用Visual Studio的调试器和监视窗口查看
ItemTemplate
在当前配置中,当反序列化XamGrid
时,ig:PersistenceManager
将TemplateColumn.ItemTemplate
显式设置为null。
- 列中显示未格式化数据的原因是,XamGrid自动返回到
ig:TemplateColumn
的键
,以从DataContext
加载数据
更新1
现在我对什么有了更好的理解,我可以解释为什么。以下内容直接取自基础设施文件:
Infrastics控件持久性框架不保存某些类型的属性。它不保存AttachedProperties、DataTemplates、路径、控件模板、样式和ItemPanelTemplates
[来源:]