feat: ensure initial state is respected in EnumSelector
This commit is contained in:
@@ -34,6 +34,7 @@ public class EnumSelector: TemplatedControl
|
|||||||
private static object? OnValueCoerce(AvaloniaObject o, object? value)
|
private static object? OnValueCoerce(AvaloniaObject o, object? value)
|
||||||
{
|
{
|
||||||
if (o is not EnumSelector selector) return null;
|
if (o is not EnumSelector selector) return null;
|
||||||
|
if (!selector.IsInitialized) return value;
|
||||||
if (value is null) return null;
|
if (value is null) return null;
|
||||||
if (value.GetType() != selector.EnumType) return null;
|
if (value.GetType() != selector.EnumType) return null;
|
||||||
var first = selector.Values?.FirstOrDefault(a => Equals(a.Value, value));
|
var first = selector.Values?.FirstOrDefault(a => Equals(a.Value, value));
|
||||||
@@ -128,6 +129,8 @@ public class EnumSelector: TemplatedControl
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Values = GenerateItemTuple();
|
Values = GenerateItemTuple();
|
||||||
|
var first = Values?.FirstOrDefault(a => Equals(a.Value, this.Value));
|
||||||
|
SetCurrentValue(SelectedValueProperty, first);
|
||||||
}
|
}
|
||||||
|
|
||||||
// netstandard 2.0 does not support Enum.GetValuesAsUnderlyingType, which is used for native aot compilation
|
// netstandard 2.0 does not support Enum.GetValuesAsUnderlyingType, which is used for native aot compilation
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Headless.XUnit;
|
||||||
|
using Ursa.Controls;
|
||||||
|
|
||||||
|
namespace HeadlessTest.Ursa.Controls.EnumSelectorTests;
|
||||||
|
|
||||||
|
public class InitialStateTest
|
||||||
|
{
|
||||||
|
[AvaloniaFact]
|
||||||
|
public void Initial_State_Respected()
|
||||||
|
{
|
||||||
|
var window = new Window();
|
||||||
|
var selector = new EnumSelector()
|
||||||
|
{
|
||||||
|
Value = HorizontalPosition.Right,
|
||||||
|
EnumType = typeof(HorizontalPosition),
|
||||||
|
};
|
||||||
|
window.Content = selector;
|
||||||
|
window.Show();
|
||||||
|
Assert.Equal(HorizontalPosition.Right, selector.Value);
|
||||||
|
Assert.NotNull(selector.SelectedValue);
|
||||||
|
Assert.Equal(HorizontalPosition.Right, selector.SelectedValue?.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user