所以我想构建一个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从来没有花费太多时间。但是,如果你在过去做过两种方式,而且你发现按照你提出的方式做起来更容易,我不会争辩。但是,我自己的经验表明,您的计划就像选择直行穿过茂密的森林,因为高速公路绕过它。 –