所以我想構建一個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並隨時將其重新加載到項目中,並且可以編輯它。
這是在任何環境中做事情的一種非常糟糕的方式,但在WPF中尤其如此。您應該保存一系列供應商和類別,以及僅包含這些信息的簡單POCO類。將它們保存爲XML,DB記錄,JSON或其他。稍後重新加載時,請通過DataTemplates爲ItemsControls中顯示的實例化視圖模型。這是使用MVVM的簡單易懂的東西。你在做什麼似乎「簡單」,但我可以從經驗告訴你,這會給你帶來很多痛苦。 –
這是一個非常好的答案,但是,類別UC下有更多圖層,每個圖層都有很多動態生成的數據,如果我要綁定每一個數據庫,它會花費我很長時間。我被限制爲不使用數據庫,並且我正在將MVVM視爲可能的最後一種方法。 –
我想說你正在描述的是爲MVVM量身定做,並將數據存儲在XML中。編寫一些DataTemplates從來沒有花費太多時間。但是,如果你在過去做過兩種方式,而且你發現按照你提出的方式做起來更容易,我不會爭辯。但是,我自己的經驗表明,您的計劃就像選擇直行穿過茂密的森林,因爲高速公路繞過它。 –