Finestra Best Practice WPF per l'immissione dei dati
Domanda
Attualmente sto giocando con WPF e ora mi chiedo quale sarebbe il layout per una tipica finestra di dataentry (oltre 20 caselle di testo e altro).
atm Sto usando un oggetto grid come questo (esempio di base)
<Grid Margin="2,2,2,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions >
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0">Vorname:</Label>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Path=Surname, UpdateSourceTrigger=PropertyChanged}" ></TextBox>
<Label Grid.Row="1" Grid.Column="0">Nachname:</Label>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Path=ChristianName, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Label Grid.Row="2" Grid.Column="0">Strasse (Wohnsitz):</Label>
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Path=Street1, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Label Grid.Row="3" Grid.Column="0">Ort (Wohnsitz):</Label>
<TextBox Grid.Row="3" Grid.Column="1" Text="{Binding Path=Town1, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Label Grid.Row="4" Grid.Column="0">Postleitzahl (Wohnsitz):</Label>
<TextBox Grid.Row="4" Grid.Column="1" Text="{Binding Path=PostalCode1, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Label Grid.Row="5" Grid.Column="0">Bundesland (Wohnsitz):</Label>
<TextBox Grid.Row="5" Grid.Column="1" Text="{Binding Path=State1, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Label Grid.Row="6" Grid.Column="0">Land (Wohnsitz):</Label>
<TextBox Grid.Row="6" Grid.Column="1" Text="{Binding Path=Country1, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Label Grid.Row="7" Grid.Column="0">Zusatz (Wohnsitz):</Label>
<TextBox Grid.Row="7" Grid.Column="1" Text="{Binding Path=AdditionalAdrInfo1, UpdateSourceTrigger=PropertyChanged}"></TextBox>
</Grid>
fondamentalmente questo soddisfa tutte le mie esigenze di layout, ma cosa succede se desidero cambiare qualcosa, come aggiungere una nuova casella di testo nella riga 3?
attualmente devo cambiare ogni singola proprietà Grid.Row maggiore di 3, ma non può essere il modo WPF previsto !?
come fanno gli altri a strutturare finestre complesse di dataentry?
tia
Soluzione
Karl Shifflett ha anche un buon approccio ai moduli LOB in WPF: http://karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better-solution /
Altri suggerimenti
Personalmente, sono un grande fan di AutoGrid: http ?: //www.codeplex.com/wpfcontrib/Wiki/View.aspx title = AutoGrid & amp; referringTitle = casa
Alcune persone usano StackPanel
nidificati per " risolvere " questo problema, ma IMHO che introduce solo un altro problema (code bloat). Penso che il modo migliore per risolvere questo problema sia quello di scrivere il proprio pannello che disponga i bambini consecutivamente in colonne. L'ho fatto su un progetto precedente e ha una serie di vantaggi:
- XAML più leggibile e conciso
- Più facile da mantenere XAML
- Prestazioni più veloci
L'utilizzo era simile al seguente:
<local:FieldPanel>
<Label>Field 1:</Label>
<TextBox/>
<Label>Field 2:</Label>
<TextBox/>
<Label>Field 3:</Label>
<TextBox/>
</local:FieldPanel>
Ecco un altro layout del modulo http://www.slideshare.net / ackava / ui-atomi forma layout