49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
using Avalonia.Controls;
|
|
using Avalonia.Input;
|
|
using LehrerApp.Core.Models;
|
|
using LehrerApp.Desktop.ViewModels.Students;
|
|
|
|
namespace LehrerApp.Desktop.Views.Students;
|
|
|
|
public partial class StudentDetailView : UserControl
|
|
{
|
|
public StudentDetailView() => InitializeComponent();
|
|
|
|
protected override void OnDataContextChanged(EventArgs e)
|
|
{
|
|
base.OnDataContextChanged(e);
|
|
if (DataContext is not StudentDetailViewModel vm) return;
|
|
vm.OnEditContact = ShowContactDialog;
|
|
vm.OnViewAddress = ShowAddressViewer;
|
|
}
|
|
|
|
private async Task<Contact?> ShowContactDialog(Contact? contact)
|
|
{
|
|
var owner = TopLevel.GetTopLevel(this) as Window;
|
|
if (owner is null) return null;
|
|
|
|
var vm = new ContactEditDialogViewModel(contact);
|
|
var dialog = new ContactEditDialog { DataContext = vm };
|
|
var saved = await dialog.ShowDialog<bool>(owner);
|
|
return saved ? vm.Result : null;
|
|
}
|
|
|
|
private void ShowAddressViewer(ContactItem contact)
|
|
{
|
|
if (!contact.HasAddress) return;
|
|
var owner = TopLevel.GetTopLevel(this) as Window;
|
|
var viewer = new AddressViewerWindow { DataContext = contact };
|
|
if (owner is not null)
|
|
viewer.Show(owner);
|
|
else
|
|
viewer.Show();
|
|
}
|
|
|
|
private void OnContactDoubleTapped(object? sender, TappedEventArgs e)
|
|
{
|
|
if (DataContext is StudentDetailViewModel vm &&
|
|
vm.ViewSelectedAddressCommand.CanExecute(null))
|
|
vm.ViewSelectedAddressCommand.Execute(null);
|
|
}
|
|
}
|