b:DataTrigger not working with enums
Posted: 08 Feb 2024, 05:35
So I've got a b:DataTrigger that's supposed to go off when a bound value that is an enum is a the right case.
I've got a C# implementation, for sanity checking everything.
In Blend, this all works perfectly when I run my Workspace solution.
And here's my enum in c#.
Meanwhile, over in the actual game running in noesis unmanaged, I'm doing the same thing.
And the triggers do not fire.
The triggers think my bound value is an int.
So if I register my enum instance using a pair of get\set accessors that cast to int... and then change my XAML triggers to listen for integers, it works!
Here's the C++ snippets:
Code: Select all
...
<b:Interaction.Triggers>
<b:DataTrigger Binding="{Binding SignInTransitionState}" Value="SignInIntro">
<b:GoToStateAction StateName="SignInIntroState" TargetName="RootGrid" />
</b:DataTrigger>
</b:Interaction.Triggers>
</Page>
In Blend, this all works perfectly when I run my Workspace solution.
And here's my enum in c#.
Code: Select all
namespace Workspace.Enums
{
public enum SignInTransitionStates
{
SignInIntro = 0,
SignInIdle,
SignInOutro,
MainMenuIntro,
MainMenuIdle,
Gameplay,
COUNT
}
}
And the triggers do not fire.
The triggers think my bound value is an int.
So if I register my enum instance using a pair of get\set accessors that cast to int... and then change my XAML triggers to listen for integers, it works!
Code: Select all
...
<b:Interaction.Triggers>
<b:DataTrigger Binding="{Binding SignInTransitionState}" Value="0">
<b:GoToStateAction StateName="SignInIntroState" TargetName="RootGrid" />
</b:DataTrigger>
</b:Interaction.Triggers>
</Page>
Code: Select all
NS_DECLARE_REFLECTION_ENUM(NoesisEnums::SignInTransitionStates)
enum class SignInTransitionStates : int
{
SignInIntro = 0,
SignInIdle,
SignInOutro,
MainMenuIntro,
MainMenuIdle,
Gameplay,
COUNT
};
NS_IMPLEMENT_REFLECTION_ENUM(NoesisEnums::SignInTransitionStates, "Workspace.Enums.SignInTransitionStates")
{
NsVal("SignInIntro", NoesisEnums::SignInTransitionStates::SignInIntro);
NsVal("SignInIdle", NoesisEnums::SignInTransitionStates::SignInIdle);
NsVal("SignInOutro", NoesisEnums::SignInTransitionStates::SignInOutro);
NsVal("MainMenuIntro", NoesisEnums::SignInTransitionStates::MainMenuIntro);
NsVal("MainMenuIdle", NoesisEnums::SignInTransitionStates::MainMenuIdle);
NsVal("Gameplay", NoesisEnums::SignInTransitionStates::Gameplay);
NsVal("COUNT", NoesisEnums::SignInTransitionStates::COUNT);
}
NoesisEnums::SignInTransitionStates m_signInTransitionState = NoesisEnums::SignInTransitionStates::MainMenuIntro;
int paNVMBackground::GetSignInTransitionStateFromInt() const
{
return (int)m_signInTransitionState;
}
void paNVMBackground::SetSignInTransitionStateFromInt(int transitionState)
{
m_signInTransitionState = (NoesisEnums::SignInTransitionStates)transitionState;
OnPropertyChanged(SignInTransitionState_NoesisName);
}