2016-08-18 72 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中包含的數據重新構建元素。