Изменить ObjectDataProvider

У меня есть приложение, в котором я использую ObjectDataProvider (App.xaml):

<Application x:Class="Example.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:src="clr-namespace:Example.Settings"
         StartupUri="MainWindow.xaml"
         Startup="Application_Startup"
         DispatcherUnhandledException="ApplicationDispatcherUnhandledException">
<Application.Resources>
    <ObjectDataProvider x:Key="odpSettings" ObjectType="{x:Type src:AppSettings}"/>
</Application.Resources>

My class is:

class AppSettings : INotifyPropertyChanged
{
    public AppSettings()
    {

    }

    Color itemColor = Colors.Crimson;

public Color ItemColor
    {
        get
        {
            return itemColor;
        }
        set
        {
            if (itemColor == value)
                return;

            itemColor = value;

            this.OnPropertyChanged("ItemColor");
        }
    }

public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }   

}

Затем у меня есть userControl, где я использую этот цвет, например:

<Border Background="{Binding Source={StaticResource odpSettings}, 
                             Path=ItemColor,Mode=TwoWay}" />

Я добавляю этот UserControl в свой MainWindow, где у меня есть элемент управления ColorPicker, и я хотел бы изменить цвет фона границы моего UserControl, выбрав цвет ColorPicker.

Я пробовал что-то вроде этого:

AppSettings objSettings = new AppSettings();
objSettings.ItemColor = colorPicker.SelectedColor;

Когда я меняю цвет с помощью ColorPicker, цвет в моем UserControl не меняется, я думаю, это потому, что я создаю новый экземпляр класса AppSettings.

Есть ли способ добиться того, что я пытаюсь сделать?

Заранее спасибо.

Альберто


person Juan Alberto    schedule 06.08.2014    source источник
comment
Можете попробовать установить Application.Current.Resources["odpSettings"] = new AppSettings();?   -  person thumbmunkeys    schedule 06.08.2014
comment
Ваш код сначала не будет работать, потому что Background имеет тип Brush, а привязанное свойство имеет тип Color.   -  person Rohit Vats    schedule 06.08.2014


Ответы (1)


Спасибо за комментарии, я использовал следующий код:

AppSettings objSettings = (AppSettings)((ObjectDataProvider)Application.Current.FindResource("odpSettings")).ObjectInstance;

Таким образом я могу получить доступ и изменить значение свойства ItemColor.

Также я меняю тип свойства на SolidColorBrush.

objSettings.ItemColor = new SolidColorBrush(colorPicker.SelectedColor);
person Juan Alberto    schedule 07.08.2014