【问题标题】:IValueConverter does not fire when XamGrid is deserialized反序列化 XamGrid 时不会触发 IValueConverter
【发布时间】:2014-03-12 18:24:57
【问题描述】:

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

  1. 使用 XAML 为 XamGrid 配置 PersistenceManager。 (参见:[B] 坚持一切)
  2. 应用程序启动(第一次)
  3. XamGrid 已绑定到数据源
  4. 绑定包括一个转换器(请参阅:[A] 列绑定)
  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,并且当应用程序第二次启动时该引用不再有意义

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

实际上,没有必要序列化整个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>

参考文献

【问题讨论】:

    标签: c# wpf xaml data-binding infragistics


    【解决方案1】:

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

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

    更新 1

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

    “Infragistics Control Persistence Framework 不保存某些类型的属性。它不保存 AttachedProperties、DataTemplates、Paths、ControlTemplates、Styles 和 ItemPanelTemplates。”

    [来源:About Infragistics Control Persistence Framework]

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多