Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当XamGrid被反序列化时,IValueConverter不会激发_C#_Wpf_Xaml_Data Binding_Infragistics - Fatal编程技术网

C# 当XamGrid被反序列化时,IValueConverter不会激发

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) 申请关闭 应用程序已启动(第

虽然我已经在C#工作了很多年,但我必须承认我对WPF+基础设施控制是新手。如果您有任何见解,我很想听听您对以下场景的想法:

  • PersistenceManager是使用XAML为XamGrid配置的。(见:[B]坚持一切)
  • 应用程序启动(第一次)
  • XamGrid已绑定到数据源
  • 绑定包括一个转换器(请参阅:[a]列绑定)
  • 转换器按预期工作
  • 用户调整
    Id
    列的大小
  • 数据通过以下方式序列化:
    PersistenceManager.Save(IgPersistenceGroup)
  • 申请关闭
  • 应用程序已启动(第二次)
  • XamGrid
    通过以下方式反序列化:
    PersistenceManager.Load(IgPersistenceGroup,_persistencedata.IgPersistenceMemoryStream)
  • XamGrid
    已绑定到数据源
  • 新数据按预期显示
  • 从未调用转换器的构造函数,因此显示错误的数据
  • Id
    列是预期的大小
  • 在这种特殊情况下,
    XamGrid
    的整个对象树正在被序列化/反序列化。因此,我怀疑我的问题与以下方面有关:

  • 正在序列化/反序列化的绑定,或
  • 转换器被引用为
    静态资源
    ,当应用程序第二次启动时,该引用不再有意义
  • 所以我的问题是:
    XamGrid
    被反序列化时,
    IValueConverter
    为什么不加载

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

    附加上下文

    • 基础设施控制版本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>
    
    <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

    [来源:]