我在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]'
有什么想法吗?
答案 0 :(得分:1)
您没有说“如何成功地串行化ComboBox元素”,但错误是UserControls的预期行为。
XamlWriter
(我假设您正在使用)无法序列化绑定,这意味着它将尝试序列化绑定的实际值。由于您绑定了泛型集合,因此失败,因为XamlWriter
无法序列化泛型。
您有两种选择:
告诉XamlWriter
您不想序列化该属性:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ObservableCollection<string> ComboItemsProperty
{
get { return ComboItemsField; }
set { ComboItemsField = value; }
}
或者如果确实需要绑定项目,则通过创建从泛型派生的自己的具体类来删除泛型问题。有关详细信息,请参阅this question。