RFC5780Page.xaml.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. namespace NatTypeTester.Views;
  2. [ExposeServices(typeof(IViewFor<RFC5780ViewModel>))]
  3. [UsedImplicitly]
  4. internal sealed partial class RFC5780Page : ITransientDependency
  5. {
  6. public RFC5780Page(RFC5780ViewModel viewModel)
  7. {
  8. InitializeComponent();
  9. ViewModel = viewModel;
  10. this.WhenActivated(d =>
  11. {
  12. this.Bind(ViewModel, vm => vm.TransportType, v => v.TransportTypeRadioButtons.SelectedIndex, type => (int)type, index => (TransportType)index).DisposeWith(d);
  13. ViewModel.WhenAnyValue(vm => vm.TransportType).Subscribe(_ => ViewModel.ResetResult()).DisposeWith(d);
  14. this.OneWayBind(ViewModel, vm => vm.TransportType, v => v.FilteringBehaviorTextBox.Visibility, type => type is TransportType.Udp ? Visibility.Visible : Visibility.Collapsed).DisposeWith(d);
  15. this.OneWayBind(ViewModel, vm => vm.Result5389.BindingTestResult, v => v.BindingTestTextBox.Text).DisposeWith(d);
  16. this.OneWayBind(ViewModel, vm => vm.Result5389.MappingBehavior, v => v.MappingBehaviorTextBox.Text).DisposeWith(d);
  17. this.OneWayBind(ViewModel, vm => vm.Result5389.FilteringBehavior, v => v.FilteringBehaviorTextBox.Text).DisposeWith(d);
  18. this.Bind(ViewModel, vm => vm.Result5389.LocalEndPoint, v => v.LocalAddressComboBox.Text).DisposeWith(d);
  19. LocalAddressComboBox.Events().LostFocus.Subscribe(_ => LocalAddressComboBox.Text = ViewModel.Result5389.LocalEndPoint?.ToString()).DisposeWith(d);
  20. this.OneWayBind(ViewModel, vm => vm.Result5389.PublicEndPoint, v => v.MappingAddressTextBox.Text).DisposeWith(d);
  21. this.BindCommand(ViewModel, vm => vm.DiscoveryNatType, v => v.DiscoveryButton).DisposeWith(d);
  22. this.Events().KeyDown
  23. .Where(x => x.Key is VirtualKey.Enter && DiscoveryButton.Command.CanExecute(default))
  24. .Subscribe(_ => DiscoveryButton.Command.Execute(default))
  25. .DisposeWith(d);
  26. ViewModel.DiscoveryNatType.ThrownExceptions.Subscribe(ex => ex.HandleExceptionWithContentDialogAsync(Content.XamlRoot).Forget()).DisposeWith(d);
  27. ViewModel.DiscoveryNatType.IsExecuting.Subscribe(b => TransportTypeRadioButtons.IsEnabled = !b).DisposeWith(d);
  28. });
  29. }
  30. }