2016-08-18 57 views
0

所以我想构建一个WPF应用程序,并遇到了一些争议。保存并加载用户控件

所以我有以下代码:

<StackPanel Name="OfferStackPanel"> 
        <TextBlock Name="OfferNameTextBlock" 
           Text="" 
           Margin="2,10,2,10" 
           HorizontalAlignment="Center" 
           TextAlignment="Center" 
           FontSize="20" 
           MaxWidth="800" 
           TextWrapping="Wrap"/> 
        <StackPanel Name="SuppliersStackPanel" 
         MinWidth="1302" 
         MaxWidth="1302" 
       ></StackPanel> 
        <Image x:Name="Logo" 
          HorizontalAlignment="Right" Source="logo.ico" 
          MaxWidth="100" 
          Margin="20,20,10,20" 
          /> 
</StackPanel> 

<Grid Name="SupplierUc"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="40"/> 
      <RowDefinition Height="30"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="13"/> 
      <ColumnDefinition Width="102"/> 
      <ColumnDefinition Width="360*"/> 
      <ColumnDefinition Width="100"/> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Column="1" 
        Grid.Row="0" 
        Text="Producator" 
        VerticalAlignment="Center" 
        ></TextBlock> 
     <TextBox Name="SupplierNameTextBox" 
      Grid.Column="2" 
       Grid.Row="0" 
       FontStyle="Italic" 
       VerticalContentAlignment="Center" 
       FontSize="25" 
       MaxWidth="300" 
       Width="300" 
       Foreground="Red" 
       HorizontalAlignment="Left" 
       Margin="0,3,0,3" 
       /> 
     <Button Name="AddCategoryButton" 
       Click="AddCategoryUc" 
       Grid.Column="1" 
       Grid.ColumnSpan="2" 
       Grid.Row="1" 
       FontSize="15" 
       Height="30" 
       MaxHeight="30" 
       Width="130" 
       MaxWidth="130" 
       Content="Adauga Categorie" 
       HorizontalAlignment="Left" 
       Background="{x:Null}" 
       BorderBrush="{x:Null}" 
       Foreground="#FF6270F5" Cursor="Hand" 
       /> 

     <Button Name="DeleteSupplierRowButton" 
       Grid.Row="0" 
       Grid.Column="3" 
       Content="Sterge Producator" 
       Background="{x:Null}" 
       BorderBrush="{x:Null}" 
       Click="RemoveSupplierUc" 
       Foreground="#FFF50F0F" 
       Cursor="Hand" 
      /> 
      <StackPanel Grid.Row="2" 
        Grid.Column="1" 
        Grid.ColumnSpan="3" 
        Name="CategoryPanel" 
      ></StackPanel> 
    </Grid> 

<Grid Name = "CategoryUC"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="40"/> 
      <RowDefinition Height="30"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="13"/> 
      <ColumnDefinition Width="102"/> 
      <ColumnDefinition Width="360*"/> 
      <ColumnDefinition Width="100*" /> 
      <ColumnDefinition Width="100"/> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Column="1" 
        Grid.Row="0" 
        Text="Categorie" 
        VerticalAlignment="Center" 
        ></TextBlock> 
     <TextBox Name="CategoryNameTextBox" 
       Grid.Column="2" 
       Grid.ColumnSpan="2" 
       Grid.Row="0" 
       FontSize="20" 
       VerticalContentAlignment="Center" 
       MinWidth="300" 
       Width="Auto" 
       Foreground="Black" 
       HorizontalAlignment="Left" 
       Margin="0,3,0,3" 
       /> 
     <Button Name="DeleteSupplierRowButton" 
       Grid.Row="0" 
       Grid.Column="4" 
       Content="Sterge Categorie" 
       Background="{x:Null}" 
       BorderBrush="{x:Null}" 
       Click="RemoveCategoryUc" 
       Foreground="#FFF50F0F" 
       Cursor="Hand" 
      /> 
     <Button Name="AddOptionUcButton" 
       Grid.Column="1" 
       Grid.Row="1" 
       Content="Adauga Optiune" 
       Click="AddOptionUc" 
       Height="20" 
       Width="100" 
       Background="{x:Null}" 
       BorderBrush="{x:Null}" 
       Foreground="Black" 
       Cursor="Hand" 
       Margin="1,1,1,1"/> 
     <UniformGrid Grid.Row="2" 
        Columns="2" 
        Grid.Column="1" 
        Grid.ColumnSpan="4" 
        ClipToBounds="True" 
        Name="OptionItems"> 
     </UniformGrid> 
    </Grid> 

因此,当用户将与UI交互,他将dinamically增加几个SupplyUser到OfferStackPanel和几个CategoryUc到每个SupplierUc。

我需要保存最终的OfferStackPanel并随时将其重新加载到项目中,并且可以编辑它。

+0

这是在任何环境中做事情的一种非常糟糕的方式,但在WPF中尤其如此。您应该保存一系列供应商和类别,以及仅包含这些信息的简单POCO类。将它们保存为XML,DB记录,JSON或其他。稍后重新加载时,请通过DataTemplates为ItemsControls中显示的实例化视图模型。这是使用MVVM的简单易懂的东西。你在做什么似乎“简单”,但我可以从经验告诉你,这会给你带来很多痛苦。 –

+0

这是一个非常好的答案,但是,类别UC下有更多图层,每个图层都有很多动态生成的数据,如果我要绑定每一个数据库,它会花费我很长时间。我被限制为不使用数据库,并且我正在将MVVM视为可能的最后一种方法。 –

+0

我想说你正在描述的是为MVVM量身定做,并将数据存储在XML中。编写一些DataTemplates从来没有花费太多时间。但是,如果你在过去做过两种方式,而且你发现按照你提出的方式做起来更容易,我不会争辩。但是,我自己的经验表明,您的计划就像选择直行穿过茂密的森林,因为高速公路绕过它。 –

回答

0

埃德居然给我的主意,用POCO clases,我设法做什么,我想通过创建自定义类和映射信息的用户输入给他们,然后序列化成XML文件。当我加载一个文件时,我在模型中反序列化它,然后使用xml中包含的数据重新构建元素。