Extend BoolToVisibilityConverter to handle more types

This commit is contained in:
Antony Male 2014-06-07 13:50:38 +01:00
parent 17d280a898
commit ad4aa28b64
2 changed files with 21 additions and 2 deletions

View File

@ -62,8 +62,7 @@ namespace Stylet.Xaml
result = (bool)value;
else if (value is IEnumerable)
result = ((IEnumerable)value).GetEnumerator().MoveNext();
else if (value.Equals(0) || value.Equals(0u) || value.Equals(0L) || value.Equals(0uL) ||
value.Equals(0.0f) || value.Equals(0.0) || value.Equals(0m))
else if (value.Equals(System.Convert.ChangeType((object)0, value.GetType())))
result = false;
else
result = true; // Not null, didn't meet any other falsy behaviour

View File

@ -67,6 +67,10 @@ namespace StyletUnitTests
Assert.AreEqual(Visibility.Collapsed, this.converter.Convert(0m, null, null, null));
Assert.AreEqual(Visibility.Collapsed, this.converter.Convert(0.0, null, null, null));
Assert.AreEqual(Visibility.Collapsed, this.converter.Convert(0.0f, null, null, null));
Assert.AreEqual(Visibility.Collapsed, this.converter.Convert((short)0, null, null, null));
Assert.AreEqual(Visibility.Collapsed, this.converter.Convert((ushort)0, null, null, null));
Assert.AreEqual(Visibility.Collapsed, this.converter.Convert((byte)0, null, null, null));
Assert.AreEqual(Visibility.Collapsed, this.converter.Convert((sbyte)0, null, null, null));
}
[Test]
@ -79,6 +83,10 @@ namespace StyletUnitTests
Assert.AreEqual(Visibility.Visible, this.converter.Convert(1m, null, null, null));
Assert.AreEqual(Visibility.Visible, this.converter.Convert(1.0, null, null, null));
Assert.AreEqual(Visibility.Visible, this.converter.Convert(1.0f, null, null, null));
Assert.AreEqual(Visibility.Visible, this.converter.Convert((short)1, null, null, null));
Assert.AreEqual(Visibility.Visible, this.converter.Convert((ushort)1, null, null, null));
Assert.AreEqual(Visibility.Visible, this.converter.Convert((byte)1, null, null, null));
Assert.AreEqual(Visibility.Visible, this.converter.Convert((sbyte)1, null, null, null));
}
[Test]
@ -109,6 +117,18 @@ namespace StyletUnitTests
Assert.AreEqual(Visibility.Visible, this.converter.Convert(new Dictionary<string, string>() { { "A", "B" } }, null, null, null));
}
[Test]
public void ConvertTreatsEmptyStringAsFalse()
{
Assert.AreEqual(Visibility.Collapsed, this.converter.Convert("", null, null, null));
}
[Test]
public void ConvertTreatsNonEmptyStringAsTrue()
{
Assert.AreEqual(Visibility.Visible, this.converter.Convert("hello", null, null, null));
}
[Test]
public void ConvertBackThrowsIfTargetTypeIsNotBool()
{