无法序列化和反序列化UserControl

时间:2017-09-25 09:24:35

标签: c# xml wpf serialization mvvm

我在C#(WPF)中使用MVVM创建了一个应用程序。将用户界面从XML序列化和反序列化为WPF时,我遇到错误。

我正在动态添加控件但是在反序列化时它会给我一个错误,如图所示:

这是我的代码。请帮我做序列化和反序列化工作。

   <UserControl x:Class="DecisionSuite.Creator.SetValue"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 xmlns:local="clr-namespace:DecisionSuite.Creator"
                 mc:Ignorable="d" 
                 d:DesignHeight="360" d:DesignWidth="800">
        <UserControl.Resources>
            <DataTemplate x:Key="SelectionTemplate">        
                <local:SetValueSet ></local:SetValueSet>
            </DataTemplate>
        </UserControl.Resources>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="2*"/>
                <RowDefinition Height="8*"/>
                <RowDefinition Height="2*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Border BorderThickness="1" Grid.Row="0" BorderBrush="LightGray" Background="LightGray" Grid.ColumnSpan="2"/>
            <Viewbox Grid.Row="0" Grid.ColumnSpan="2">
                <TextBlock Margin="5" Text="Set Value"/>
            </Viewbox>
            <Border BorderThickness="1,1,1,1" Grid.Row="1"  BorderBrush="LightGray">
                <ItemsControl ItemTemplate="{StaticResource SelectionTemplate}" ItemsSource="{Binding SetValueModels}"/>            
            </Border>
            <Grid Grid.Row="1">
            </Grid>
            <Border BorderThickness="1,0,1,1" Grid.Row="2" BorderBrush="LightGray" Grid.ColumnSpan="2"/>
            <Button Grid.Row="2" Grid.ColumnSpan="2" Command="{Binding RefreshList}">
                <Viewbox >
                    <TextBlock Text="Add New Item" Margin="0" Padding="5" RenderTransformOrigin="1.079,1.079"></TextBlock>
                </Viewbox>
            </Button>
        </Grid>
    </UserControl>

1 个答案:

答案 0 :(得分:1)

您不应该序列化用户控件,而是序列化他们的数据,因为用户控件基本上是您的用户界面,如TextBox,Button等。

您应该序列化仅重新创建用户控件所需的数据,然后设计用户控件以允许从序列化数据重新构建并作为新的用户控件。然后你的问题就会解决。