2012-07-18 2 views
1

바라건대 간단한 질문입니다. 다른 사용자 지정 컨트롤 목록이 들어있는 종속성 속성이있는 사용자 지정 컨트롤이 있습니다. 제네릭 형식 'System.Windows.FreezableCollection`을 serialize 할 수 없습니다.

public static readonly DependencyProperty BlockObjectsProperty = DependencyProperty.Register("BlockObjects", typeof(FreezableCollection<BlockObject>), typeof(Block), new FrameworkPropertyMetadata(new FreezableCollection<BlockObject>(), null)); 
public FreezableCollection<BlockObject> BlockObjects 
{ 
    get { return (FreezableCollection<BlockObject>)base.GetValue(BlockObjectsProperty); } 
    set { base.SetValue(BlockObjectsProperty, value); } 
} 

다음 컨트롤

<Viewbox Grid.Row="2" Stretch="Uniform"> 
    <ItemsControl x:Name="tStack" ItemsSource="{TemplateBinding BlockObjects}" ContextMenu="{StaticResource BodyContextMenuKey}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Vertical" VerticalAlignment="Stretch" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</Viewbox> 

내 문제 지금은 파일에이를 직렬화 할 것입니다하지만 난 '제네릭 형식을 직렬화 할 수 없다'는군요 시스템을 채우기 위해 XAML 내에서 사용 .Windows.FreezableCollection` 'XamlWriter.Save 사용할 때. 이 일반 클래스의 경우 serialize 할 수있는 방법을 설명하기 위해 특성을 사용할 수 있습니다 (맞습니까?)하지만 정적 종속성 속성을 어떻게 serialize 할 수 있습니까?

답변

5

좋아요. 어리석은 저에게는 인터넷에 관한 많은 정보가 있습니다. 간단한 해결책은 일반 freezablecollection을 가져 와서 다음과 같이 none generic 클래스를 파생시키는 것입니다.

public class BlockObjectCollection : FreezableCollection<BlockObject> 
{ 
} 

다음 종속성 속성

public static readonly DependencyProperty BlockObjectsProperty = DependencyProperty.Register("BlockObjects", typeof(BlockObjectCollection), typeof(Block), new FrameworkPropertyMetadata(new BlockObjectCollection(), null)); 
    public BlockObjectCollection BlockObjects 
    { 
     get { return (BlockObjectCollection)base.GetValue(BlockObjectsProperty); } 
     set { base.SetValue(BlockObjectsProperty, value); } 
    } 
+0

믿을 수 있지만 사실을 교체! ObservableCollection <>에 대해서도 유효합니다. – Ozzy

관련 문제