反序列化XamGrid时,IValueConverter不会触发

时间:2014-03-12 18:24:57

标签: c# wpf xaml data-binding infragistics

虽然我已经使用C#多年了,但我必须承认我是WPF + Infragistics控件的新手。如果您有任何见解,我很乐意听取您对以下情况的看法:

  1. 使用XAML为XamGrid配置PersistenceManager。 (见:[B]坚持一切)
  2. 申请开始(第一次)
  3. XamGrid绑定到数据源
  4. 绑定包括转换器(参见:[A]列绑定)
  5. 转换器按预期工作
  6. 用户调整Id
  7. 的大小
  8. 数据通过以下方式序列化:PersistenceManager.Save(IgPersistenceGroup);
  9. 申请已关闭
  10. 申请开始(第二次)
  11. XamGrid通过:PersistenceManager.Load(IgPersistenceGroup, _persistedData.IgPersistenceMemoryStream);
  12. 取消邮寄
  13. XamGrid绑定到数据源
  14. 新数据按预期显示
  15. 永远不会调用转换器的构造函数,因此会显示错误的数据
  16. Id列是预期的尺寸
  17. 在这种特殊情况下,XamGrid的整个对象树正在被序列化/反序列化。结果,我怀疑我的问题与:

    有关
    1. 正在序列化/反序列化的绑定,或
    2. 转换器被引用为StaticResource,并且当应用程序第二次启动时该引用不再有意义
    3. 所以我的问题是:为什么IValueConverterXamGrid反序列化时不会加载?

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

      其他背景

      • Infragistics控制版本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]坚持一切

      <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>
      

      参考

1 个答案:

答案 0 :(得分:1)

使用TemplateColumn.ItemTemplate保留XamGrid时,似乎没有序列化ig:PersistenceManager(又名:SeverityColumn)。结果:

  1. 当应用程序第一次启动时,将从BAML加载TemplateColumn.ItemTemplate,并以适当的格式显示该列(使用提供的IValueConverter)。
    • 注意:您将能够看到ItemTemplate使用 Visual Studio的调试程序和观看窗口
  2. 在当前配置中,ig:PersistenceManager在反序列化TemplateColumn.ItemTemplate时明确将XamGrid设置为null。
    • 在列中显示未格式化数据的原因是因为XamGrid会自动回退到ig:TemplateColumn Key以从DataContext <加载数据/ LI>
  3. 更新1

    现在我对 what 有了更好的理解,我可以为为什么提供解释。以下内容直接来自Infragistics文档:

    &#34; Infragistics Control Persistence Framework未保存某些类型的属性。它不保存AttachedProperties, DataTemplates ,路径,ControlTemplates,样式和ItemPanelTemplates。&#34;

    [来源:About Infragistics Control Persistence Framework]