diff options
author | Paul DiPietro <pauldipietro@users.noreply.github.com> | 2016-09-12 06:51:19 -0500 |
---|---|---|
committer | Rui Marinho <me@ruimarinho.net> | 2016-09-12 12:51:19 +0100 |
commit | 368a375f13fc2e4b5ff00dbbdd7a2d6bb53988eb (patch) | |
tree | 35a8bc610aa00035dc70094737af529921806123 | |
parent | 420ceb37d0d1d78dde17c717614c6874684a399e (diff) | |
download | xamarin-forms-368a375f13fc2e4b5ff00dbbdd7a2d6bb53988eb.tar.gz xamarin-forms-368a375f13fc2e4b5ff00dbbdd7a2d6bb53988eb.tar.bz2 xamarin-forms-368a375f13fc2e4b5ff00dbbdd7a2d6bb53988eb.zip |
[C] Prevent enabling a Button via setting a Command (#308)
3 files changed, 58 insertions, 3 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla43354.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla43354.cs new file mode 100644 index 00000000..6ed77b96 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla43354.cs @@ -0,0 +1,56 @@ +using System; + +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 43354, "Button command being set after IsEnabled enables the button", PlatformAffected.All)] + public class Bugzilla43354 : TestContentPage + { + protected override void Init() + { + var buttonIsEnabledSetFirst = new Button + { + Text = "Click to display an alert", + IsEnabled = false, + Command = new Command(() => DisplayAlert("Test", "Message", "Cancel")), + }; + + var buttonIsEnabledSetSecond = new Button + { + Text = "Click to enable/disable button", + Command = new Command(() => + { + if (buttonIsEnabledSetFirst.IsEnabled) + buttonIsEnabledSetFirst.IsEnabled = false; + else + buttonIsEnabledSetFirst.IsEnabled = true; + }) + }; + + var buttonSetCommandToNull = new Button + { + Text = "Click to set first button's command to null", + Command = new Command(() => buttonIsEnabledSetFirst.Command = null) + }; + + Content = Content = new StackLayout + { + VerticalOptions = LayoutOptions.Center, + Children = + { + buttonIsEnabledSetFirst, + buttonIsEnabledSetSecond, + buttonSetCommandToNull + } + }; + } + } +} diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index adf173df..1e0a2732 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -124,6 +124,7 @@ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42364.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42519.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla43516.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Bugzilla43354.cs" /> <Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34561.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34727.cs" /> diff --git a/Xamarin.Forms.Core/Button.cs b/Xamarin.Forms.Core/Button.cs index 31573076..a4dffc78 100644 --- a/Xamarin.Forms.Core/Button.cs +++ b/Xamarin.Forms.Core/Button.cs @@ -180,7 +180,7 @@ namespace Xamarin.Forms void CommandCanExecuteChanged(object sender, EventArgs eventArgs) { ICommand cmd = Command; - if (cmd != null) + if (cmd != null && IsEnabled) IsEnabledCore = cmd.CanExecute(CommandParameter); } @@ -225,8 +225,6 @@ namespace Xamarin.Forms Command.CanExecuteChanged += CommandCanExecuteChanged; CommandCanExecuteChanged(this, EventArgs.Empty); } - else - IsEnabledCore = true; } void OnSourceChanged(object sender, EventArgs eventArgs) |