首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IValueConverter在反序列化XamGrid时不会触发

IValueConverter在反序列化XamGrid时不会触发
EN

Stack Overflow用户
提问于 2014-03-12 18:24:57
回答 1查看 277关注 0票数 0

虽然我已经使用了C#很多年了,但我必须承认,我对WPF +不脆弱性控制还是新手。如果你有任何洞察力,我想听听你对以下情况的看法:

  1. PersistenceManager是使用XAML为XamGrid配置的。(见:B坚持一切)
  2. 应用程序启动(第一次)
  3. XamGrid绑定到数据源
  4. 绑定包括转换器(参见:列绑定)
  5. 转换器按预期工作工作
  6. 用户调整Id列的大小。
  7. 数据通过:PersistenceManager.Save(IgPersistenceGroup);序列化
  8. 申请封闭
  9. 申请启动(第二次)
  10. XamGrid是通过:PersistenceManager.Load(IgPersistenceGroup, _persistedData.IgPersistenceMemoryStream);反序列化的
  11. XamGrid绑定到数据源。
  12. 新数据按预期显示。
  13. 转换器的构造函数从未被称为,结果显示了错误的数据
  14. Id列是预期的大小

在这种情况下,XamGrid的整个对象树正在被序列化/反序列化。因此,我怀疑我的问题与:

  1. 序列化/反序列化的绑定,或
  2. 转换器被引用为StaticResource,当应用程序第二次启动时,该引用就不再有意义了。

所以我的问题是:当IValueConverter被反序列化时,为什么XamGrid不加载?

实际上,没有必要序列化整个XamGrid.但这是一个完全不同的问题。

附加上下文

  • 不脆弱性控制12.1.20121.2286版

示例代码

A列绑定

代码语言:javascript
复制
<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持久化一切

代码语言:javascript
复制
<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>

参考资料

  • 使用不碎片控制持久性框架
  • 关于非脆弱控制持久性框架
  • MSDN: IValueConverter
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-13 20:35:30

当使用TemplateColumn.ItemTemplate持久化时,XamGrid (又名: SeverityColumn)似乎没有被序列化。因此:

  1. 当应用程序第一次启动时,将从BAML加载TemplateColumn.ItemTemplate,并以适当的格式显示该列(使用提供的IValueConverter)。
    • 注意:您将能够使用Visual的调试器和监视窗口看到ItemTemplate

  1. 在当前配置中,ig:PersistenceManager在反序列化TemplateColumn.ItemTemplate时显式地将XamGrid设置为null。
    • 列中显示未格式化数据的原因是XamGrid自动返回到ig:TemplateColumnKey以从DataContext加载数据。

更新1

现在我对什么有了更好的理解,我可以解释一下为什么。以下内容直接摘自“不脆弱性”文档:

“有一些类型的属性没有保存在不碎片控制持久性框架中。它不保存AttachedProperties、DataTemplates__,路径、ControlTemplates、样式和ItemPanelTemplates。”

[资料来源:关于非脆弱控制持久性框架]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22360579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档