Static Strings in Xaml
<p>I have a class with some static information, i.e:</p>

<pre><code>public static class MyApp
{
    public static string Name = "Awesome App";
    public static string Version = "1.0";
}
</code></pre>

<p>I want anywhere in my application that displays the App's name to use this string, the problem I have is in a few places there's more than variable string.</p>

<p>So for example:</p>

<pre><code>&lt;TextBlock Text="Awesome App running version 1.0"/&gt;
</code></pre>

<p>I want this to populate from the static variables. I have done some reading and see a couple of options:</p>

<h2>1. Using a <code>MultiBinding</code> and loading in the relevant <code>ResourceDictionary</code>:</h2>

<pre><code>&lt;ResourceDictionary&gt;
    &lt;sys:String x:Key="AppName"&gt;Awesome App&lt;/sys:String&gt;
    &lt;sys:String x:Key="AppVersion"&gt;1.0&lt;/sys:String&gt;
&lt;/ResourceDictionary&gt;

&lt;TextBlock&gt;
    &lt;TextBlock.Text&gt;
        &lt;MultiBinding StringFormat="{}{0} running version {1}"&gt;
            &lt;Binding Path="{StaticResource AppName}"/&gt;
            &lt;Binding Path="{StaticResource AppVersion}"/&gt;
        &lt;/MultiBinding&gt;
    &lt;/TextBlock.Text&gt;
&lt;/TextBlock&gt;
</code></pre>

<p>I guess I could also have multiple <code>TextBlock</code>s too:</p>

<pre><code>&lt;TextBlock&gt;
    &lt;TextBlock Text="{StaticResource AppName}"/&gt;
    &lt;TextBlock Text=" running version "/&gt;
    &lt;TextBlock Text="{StaticResource AppVersion}"/&gt;
&lt;TextBlock&gt;
</code></pre>

<h2>2. Use a static "strings" class with static properties:</h2>

<pre><code>public static class Strings
{
    public static string ProductRunningVersion =&gt;
        $"{MyApp.Name} running version {MyApp.Version}";
}

&lt;TextBlock Text="{x:Static local:Strings.ProductRunningVersion}"/&gt;
</code></pre>

<p>The use of <code>=&gt;</code> in the property is intentional - when testing I was having issues with the initialization order of some of my static variables. (Some are initialized through a static constructor)</p>

<hr>

<p>I'm not sure which approach is better.
Approach one feels more "proper" but also very messy.
Approach two feels a lot cleaner but less typical to what I'm use to with WPF. Also having to define the strings as <code>get</code> functions rather than a static string costs somewhat?</p>

<p>Are either of these approaches any good? I'm not really after localisation, more to change the name and a few images throughout the app.</p>