I have a situation where some application wide values are stored as constants – this is a requirement as they are needed in attribute definitions (attributes must resolve at compile time, so even static members don’t work).
I wish to also be able to also reuse these values in XAML files. So if I have my constants like this:
public class MyConstants
{
public const string Constant1 = "Hello World";
}
I want to one way bind them to controls defined in XAML something like this:
<TextBlock Text="{Binding MyConstants.Constant1}" />
Is this possible in a straight forward manner? I’ve looked over binding examples but can’t seem to find this sort of scenario.
Would there maybe be some kind of work around I could do (maybe bindings translated into parameters for a method that dynamically pulls the constant field via reflection)
Here is the approach I would take:-
Through out the XAML I would use a StaticResource syntax like this:-
Create a static method somewhere that returns a
ResourceDictionaryand takesTypeas parameter. The function uses reflection to enumerate the set of public constants it exposes. It adds the string value of each constant to theResourceDictionaryformulating the key name from the Type name and the Consts name.During application startup pass
typeof(MyConstants)to this function add the returnedResourceDictionariesto the collection in the Application ResourcesMergedDictionariesproperty.Now all the static resources should resolve correctly, there is no need to invoke any binding or set any datacontext in order to get this to work. The value is resolved during XAML parsing.