2017-09-25 4 views
-1

J'ai fait une application avec MVVM en C# (WPF). Je suis confronté à une erreur lors de la sérialisation et la désérialisation de l'interface utilisateur de XML à WPF.Impossible de sérialiser et de désérialiser un UserControl

J'ajoute dynamiquement le contrôle mais désérialisation il me donne une erreur comme dans l'image:

Voici mon code. S'il vous plaît, aidez-moi à faire le travail de sérialisation et de désérialisation.

<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> 
+0

Appuyez sur Copier les détails de l'exception dans le Presse-papiers. Puis ouvrez le Bloc-notes et "PASTE". Post exception du bloc-notes. Divisez l'instruction en 3 lignes afin de pouvoir déterminer quelle partie de l'instruction échoue. – jdweng

+0

Je reçois en dessous de l'erreur ... LineNumber = 1 LinePosition = 918 Message = Impossible d'ajouter un contenu de type 'System.Windows.DataTemplate' à un objet de type 'System.Windows.ResourceDictionary'. Erreur sur l'objet 'SelectionTemplate', ligne 1, position 918. NameContext = ressources Source = PresentationFramework –

+0

Je ne sais pas où se trouve la position de ligne 918. L'erreur est probablement due au fait que xml n'est pas compatible avec le xaml. Cassez les instructions en morceaux et trouvez où se trouve 918. – jdweng

Répondre

1

Vous ne devriez pas sérialiser Contrôles utilisateur, mais sérialisation leurs données, parce que les contrôles utilisateur sont essentiellement l'interface utilisateur, comme la zone de texte, boutons, etc ..

Vous devez sérialiser les données requises pour re -créer uniquement le contrôle utilisateur, puis concevoir votre contrôle utilisateur pour permettre la reconstruction à partir des données sérialisées et en tant que nouveau contrôle utilisateur. Alors votre problème serait résolu.