Files
LehrerApp/LehrerApp.Desktop/Views/Students/ContactEditDialog.axaml
T
adminandClaude Sonnet 5 db1afff7e4 Fehlerbehandlung, Logging und feldbezogene Validierung (Kapitel 13.2)
Zentrale Exception-Behandlung (Dispatcher.UIThread.UnhandledException,
AppDomain, TaskScheduler) verhindert Abstürze und protokolliert Fehler
über AppLogger in eine rotierende Log-Datei im App-Datenverzeichnis.
Toast-Benachrichtigungen zeigen Erfolg/Fehler global an. Alle Dialoge
mit Formularfeldern zeigen Validierungsmeldungen jetzt direkt am
betroffenen Feld statt in einem Sammel-Label.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 12:38:30 +02:00

90 lines
4.1 KiB
XML

<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:LehrerApp.Desktop.ViewModels.Students"
x:Class="LehrerApp.Desktop.Views.Students.ContactEditDialog"
x:DataType="vm:ContactEditDialogViewModel"
Title="{Binding DialogTitle}"
Width="520" Height="650"
MinWidth="460" MinHeight="560"
CanResize="True" WindowStartupLocation="CenterOwner">
<Grid RowDefinitions="*,Auto" Margin="24,20">
<ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Auto">
<StackPanel Spacing="16">
<TextBlock Text="{Binding DialogTitle}" FontSize="18" FontWeight="SemiBold"/>
<Grid ColumnDefinitions="*,10,*">
<StackPanel Grid.Column="0" Spacing="4">
<TextBlock Text="Name *" FontSize="12" Opacity="0.7"/>
<TextBox x:Name="NameBox" Text="{Binding Name}" PlaceholderText="Name"/>
<TextBlock Text="{Binding NameError}" Foreground="Red" FontSize="11"
IsVisible="{Binding NameError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
</StackPanel>
<StackPanel Grid.Column="2" Spacing="4">
<TextBlock Text="Beziehung" FontSize="12" Opacity="0.7"/>
<ComboBox ItemsSource="{Binding RelationPresets}"
SelectedItem="{Binding Relation}"
HorizontalAlignment="Stretch"/>
</StackPanel>
</Grid>
<Grid ColumnDefinitions="*,10,*">
<StackPanel Grid.Column="0" Spacing="4">
<TextBlock Text="Telefon" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Phone}" PlaceholderText="Telefon / Handy"/>
</StackPanel>
<StackPanel Grid.Column="2" Spacing="4">
<TextBlock Text="E-Mail" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Email}" PlaceholderText="E-Mail"/>
</StackPanel>
</Grid>
<StackPanel Spacing="8">
<TextBlock Text="Adresse" FontSize="14" FontWeight="SemiBold"/>
<TextBox Text="{Binding Street}" PlaceholderText="Straße und Hausnummer"/>
<Grid ColumnDefinitions="110,10,*">
<TextBox Grid.Column="0" Text="{Binding PostalCode}" PlaceholderText="PLZ"/>
<TextBox Grid.Column="2" Text="{Binding City}" PlaceholderText="Ort"/>
</Grid>
</StackPanel>
<Separator/>
<CheckBox Content="Dieser Kontakt gilt nicht mehr"
IsChecked="{Binding IsInvalid}"/>
<StackPanel Spacing="10" IsVisible="{Binding IsInvalid}">
<Grid ColumnDefinitions="*,10,*">
<StackPanel Grid.Column="0" Spacing="4">
<TextBlock Text="Ungültig seit *" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding InvalidSinceText}" PlaceholderText="TT.MM.JJJJ"/>
<TextBlock Text="{Binding InvalidSinceError}" Foreground="Red" FontSize="11"
IsVisible="{Binding InvalidSinceError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
</StackPanel>
<StackPanel Grid.Column="2" Spacing="4">
<TextBlock Text="Grund" FontSize="12" Opacity="0.7"/>
<ComboBox ItemsSource="{Binding InvalidReasonOptions}"
SelectedItem="{Binding SelectedInvalidReason}"
HorizontalAlignment="Stretch"/>
</StackPanel>
</Grid>
<StackPanel Spacing="4">
<TextBlock Text="Ergänzung zum Grund" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding InvalidReasonDetails}"
PlaceholderText="Optionaler Hinweis"
AcceptsReturn="True" Height="60" TextWrapping="Wrap"/>
</StackPanel>
</StackPanel>
</StackPanel>
</ScrollViewer>
<Grid Grid.Row="1" ColumnDefinitions="*,10,*" Margin="0,18,0,0">
<Button Grid.Column="0" Content="Abbrechen" HorizontalAlignment="Stretch"
Click="OnCancel"/>
<Button Grid.Column="2" Content="Speichern" HorizontalAlignment="Stretch"
Click="OnSave"/>
</Grid>
</Grid>
</Window>