0

我的 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]'

有什么想法吗?

4

1 回答 1

2

你没有说你是如何“成功地序列化(ing)组合框元素”,但错误是用户控件的预期行为。

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

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

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

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

于 2012-09-04T14:59:50.110 回答