Вы можете использовать статические данные, с которых вы можете читать и привязывать их, используя x: Static в вашем XAML. Я не люблю делать статические глобальные настройки, так как это скорее анти-шаблон.
Я думаю, вам следует обратить внимание на инверсию управления / внедрения зависимостей. Существует много IoC-контейнеров, но я обычно использую Unity для внедрения зависимостей. Это доступно в http://prism.codeplex.com
Используя IoC, вы можете зарегистрировать свой класс настроек, и в вашей виртуальной машине, которой нужны данные, они могут легко извлечь нужные вам настройки. Ваш код будет выглядеть примерно так (при использовании единицы).
var vm = container.Resolve<SomeViewModel>();
public class SomeViewModel
{
public SomeViewModel(IUnityContainer container)
{
ISomeSettings settings = container.Resolve<ISomeSettings>();
}
}
РЕДАКТИРОВАТЬ: Или вот другое решение, которое вы можете искать:
Создайте свой синглтон:
class GlobalSettings : ViewModel
{
private Thickness m_globalGirth;
private static GlobalSettings m_instance = new GlobalSettings();
public GlobalSettings()
{
GlobalGirth = new Thickness(2, 2, 2, 2);
}
public Thickness GlobalGirth
{
get { return m_globalGirth; }
set
{
m_globalGirth = value;
InvokePropertyChanged("GlobalGirth");
}
}
public static GlobalSettings Instance
{
get { return m_instance; }
set { m_instance = value; }
}
}
Затем настройте свои привязки:
<Window x:Class="WpfApplication3.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfApplication3="clr-namespace:WpfApplication3"
Title="Window1" Height="300" Width="300" MouseDoubleClick="Window_MouseDoubleClick">
<Window.Resources>
<WpfApplication3:GlobalSettings x:Key="settings" />
</Window.Resources>
<Grid>
<Border BorderThickness="{Binding Source={StaticResource settings}, Path=Instance.GlobalGirth}"
BorderBrush="Black"
Width="100"
Height="100" />
</Grid>
</Window>