为什么UserControl导致序列化错误?

时间:2012-09-04 14:45:35

标签: wpf xaml serialization user-controls

我在MainWindow.xaml中有以下ComboBox:

<ComboBox ItemsSource="{Binding ComboItemsProperty}" />

在MainWindow.xaml.cs中:

ObservableCollection<string> ComboItemsField = 
    new ObservableCollection<string>();
public ObservableCollection<string> ComboItemsProperty
{
    get { return ComboItemsField; }
    set { ComboItemsField = value; }
}

这完美无缺!我可以向属性添加项目并成功序列化ComboBox元素。

我的问题是,为什么当我在UserControl.xaml和UserControl.xaml.cs中有这个EXACT代码时,我在尝试序列化控件时出现以下错误:

无法序列化泛型类型 'System.Collections.ObjectModel.ObservaleCollection'1 [System.String]'

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您没有说“如何成功地串行化ComboBox元素”,但错误是UserControls的预期行为。

XamlWriter(我假设您正在使用)无法序列化绑定,这意味着它将尝试序列化绑定的实际值。由于您绑定了泛型集合,因此失败,因为XamlWriter无法序列化泛型。

您有两种选择: 告诉XamlWriter您不想序列化该属性:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ObservableCollection<string> ComboItemsProperty
{
    get { return ComboItemsField; }
    set { ComboItemsField = value; }
}

或者如果确实需要绑定项目,则通过创建从泛型派生的自己的具体类来删除泛型问题。有关详细信息,请参阅this question