| File: Shell\BackButtonBehavior.cs | Web Access |
| Project: src\src\Controls\src\Core\Controls.Core.csproj (Microsoft.Maui.Controls) |
#nullable disable using System; using System.Windows.Input; namespace Microsoft.Maui.Controls { /// <include file="../../../docs/Microsoft.Maui.Controls/BackButtonBehavior.xml" path="Type[@FullName='Microsoft.Maui.Controls.BackButtonBehavior']/Docs/*" /> public class BackButtonBehavior : BindableObject { /// <summary>Bindable property for <see cref="CommandParameter"/>.</summary> public static readonly BindableProperty CommandParameterProperty = BindableProperty.Create(nameof(CommandParameter), typeof(object), typeof(BackButtonBehavior), null, BindingMode.OneTime, propertyChanged: OnCommandParameterChanged); /// <summary>Bindable property for <see cref="Command"/>.</summary> public static readonly BindableProperty CommandProperty = BindableProperty.Create(nameof(Command), typeof(ICommand), typeof(BackButtonBehavior), null, BindingMode.OneTime, propertyChanged: OnCommandChanged); /// <summary>Bindable property for <see cref="IconOverride"/>.</summary> public static readonly BindableProperty IconOverrideProperty = BindableProperty.Create(nameof(IconOverride), typeof(ImageSource), typeof(BackButtonBehavior), null, BindingMode.OneTime); /// <summary>Bindable property for <see cref="IsEnabled"/>.</summary> public static readonly BindableProperty IsEnabledProperty = BindableProperty.Create(nameof(IsEnabled), typeof(bool), typeof(BackButtonBehavior), true, BindingMode.OneWay); /// <summary>Bindable property for <see cref="IsVisible"/>.</summary> public static readonly BindableProperty IsVisibleProperty = BindableProperty.Create(nameof(IsVisible), typeof(bool), typeof(BackButtonBehavior), true, BindingMode.OneWay); /// <summary>Bindable property for <see cref="TextOverride"/>.</summary> public static readonly BindableProperty TextOverrideProperty = BindableProperty.Create(nameof(TextOverride), typeof(string), typeof(BackButtonBehavior), null, BindingMode.OneTime); /// <include file="../../../docs/Microsoft.Maui.Controls/BackButtonBehavior.xml" path="//Member[@MemberName='Command']/Docs/*" /> public ICommand Command { get { return (ICommand)GetValue(CommandProperty); } set { SetValue(CommandProperty, value); } } /// <include file="../../../docs/Microsoft.Maui.Controls/BackButtonBehavior.xml" path="//Member[@MemberName='CommandParameter']/Docs/*" /> public object CommandParameter { get { return GetValue(CommandParameterProperty); } set { SetValue(CommandParameterProperty, value); } } /// <include file="../../../docs/Microsoft.Maui.Controls/BackButtonBehavior.xml" path="//Member[@MemberName='IconOverride']/Docs/*" /> public ImageSource IconOverride { get { return (ImageSource)GetValue(IconOverrideProperty); } set { SetValue(IconOverrideProperty, value); } } /// <include file="../../../docs/Microsoft.Maui.Controls/BackButtonBehavior.xml" path="//Member[@MemberName='IsEnabled']/Docs/*" /> public bool IsEnabled { get { return (bool)GetValue(IsEnabledProperty); } set { SetValue(IsEnabledProperty, value); } } public bool IsVisible { get { return (bool)GetValue(IsVisibleProperty); } set { SetValue(IsVisibleProperty, value); } } /// <include file="../../../docs/Microsoft.Maui.Controls/BackButtonBehavior.xml" path="//Member[@MemberName='TextOverride']/Docs/*" /> public string TextOverride { get { return (string)GetValue(TextOverrideProperty); } set { SetValue(TextOverrideProperty, value); } } bool IsEnabledCore { set => SetValue(IsEnabledProperty, value); } static void OnCommandChanged(BindableObject bindable, object oldValue, object newValue) { var self = (BackButtonBehavior)bindable; var oldCommand = (ICommand)oldValue; var newCommand = (ICommand)newValue; self.OnCommandChanged(oldCommand, newCommand); } static void OnCommandParameterChanged(BindableObject bindable, object oldValue, object newValue) { ((BackButtonBehavior)bindable).OnCommandParameterChanged(); } void CanExecuteChanged(object sender, EventArgs e) { IsEnabledCore = Command.CanExecute(CommandParameter); } void OnCommandChanged(ICommand oldCommand, ICommand newCommand) { if (oldCommand != null) { oldCommand.CanExecuteChanged -= CanExecuteChanged; } if (newCommand != null) { newCommand.CanExecuteChanged += CanExecuteChanged; IsEnabledCore = Command.CanExecute(CommandParameter); } else { IsEnabledCore = true; } } void OnCommandParameterChanged() { if (Command != null) IsEnabledCore = Command.CanExecute(CommandParameter); } } }