Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
Wpf 为什么UserControl会导致序列化错误?_Wpf_Xaml_Serialization_User Controls - Fatal编程技术网

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

Wpf 为什么UserControl会导致序列化错误?,wpf,xaml,serialization,user-controls,Wpf,Xaml,Serialization,User Controls,我的MainWindow.xaml中有以下组合框: <ComboBox ItemsSource="{Binding ComboItemsProperty}" /> 在MainWindow.xaml.cs中: ObservableCollection<string> ComboItemsField = new ObservableCollection<string>(); public ObservableCollection<string

我的MainWindow.xaml中有以下组合框:

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

在MainWindow.xaml.cs中:

ObservableCollection<string> ComboItemsField = 
    new ObservableCollection<string>();
public ObservableCollection<string> ComboItemsProperty
{
    get { return ComboItemsField; }
    set { ComboItemsField = value; }
}
ObservableCollection组合项字段=
新的可观察集合();
公共可见集合组合项属性
{
获取{return ComboItemsField;}
设置{ComboItemsField=value;}
}
这很好用!我可以向属性添加项并成功序列化ComboBox元素

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

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

有什么想法吗?

您没有说如何“成功序列化(序列化)ComboBox元素”,但错误是UserControls的预期行为

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

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

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ObservableCollection<string> ComboItemsProperty
{
    get { return ComboItemsField; }
    set { ComboItemsField = value; }
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
公共可见集合组合项属性
{
获取{return ComboItemsField;}
设置{ComboItemsField=value;}
}

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

谢谢您提供的信息。我正在使用XamlWriter进行序列化。还有一件事。您说XamlWrite无法序列化绑定,但是它成功地序列化了Mainwindow.xaml和Mainwindow.xaml.cs中的绑定。对吗?我不知道它是怎么做到的。你的套餐有什么XAML?你说得对。它不会序列化绑定。我应该说得更清楚些。我希望它序列化集合中的值。你的回答帮助我做到了这一点。非常感谢。