summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul DiPietro <pauldipietro@users.noreply.github.com>2016-09-12 06:51:19 -0500
committerRui Marinho <me@ruimarinho.net>2016-09-12 12:51:19 +0100
commit368a375f13fc2e4b5ff00dbbdd7a2d6bb53988eb (patch)
tree35a8bc610aa00035dc70094737af529921806123
parent420ceb37d0d1d78dde17c717614c6874684a399e (diff)
downloadxamarin-forms-368a375f13fc2e4b5ff00dbbdd7a2d6bb53988eb.tar.gz
xamarin-forms-368a375f13fc2e4b5ff00dbbdd7a2d6bb53988eb.tar.bz2
xamarin-forms-368a375f13fc2e4b5ff00dbbdd7a2d6bb53988eb.zip
[C] Prevent enabling a Button via setting a Command (#308)
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla43354.cs56
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems1
-rw-r--r--Xamarin.Forms.Core/Button.cs4
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)