MVVM. Не обновляется значение сво-ва, объявленного в нескольких контролах
Пытаюсь создать приложение, работающее по принципу MVVM.
Есть класс ClockValue, она содержит два сво-ва :
public string ClockImage
{
get
{
return imageSource;
}
set
{
imageSource = value;
RaisePropertyChanged("ClockImage");
}
}
public string Music
{
get
{
return music;
}
set
{
music = value;
RaisePropertyChanged("Music");
}
}
Есть ViewModel, работающий с этим классом.
public class ClockViewModel : ViewModelBase
{
...
public ClockViewModel()
{ Load();}
public ClockValue Singleton
{
get { return _clockOpions; }
private set
{
value = _clockOpions;
RaisePropertyChanged("Singleton");
MessageBox.Show(Singleton.ClockImage);
}
}
#region Command Properties
RelayCommand _saveCommand;
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(param => this.Save(param), param => this.CanSave);
// RaisePropertyChanged("SaveCommand");
}
return _saveCommand;
}
}
public void Save(object o)
{
if (String.IsNullOrWhiteSpace(o.ToString()))
{
clockOpions = (ClockValue)this.Singleton;
clockOpions.ClockImage = PictureHelper.FilePath + "ClockImage\\Xan.png";
//_clockOpions = clockOpions;
this.Singleton = (ClockValue)clockOpions;
// RaisePropertyChanged("Singleton");
}
else
{
clockOpions = (ClockValue)this.Singleton;
clockOpions.ClockImage = PictureHelper.FilePath + "ClockImage\\" + o.ToString() + ".png";
//_clockOpions = clockOpions;
this.Singleton = (ClockValue)clockOpions;
//RaisePropertyChanged("Singleton");
}
}
public bool CanSave { get { return true; } }
public void Load()
{
...
foreach (XElement att2 in attList)
{
clockOpions = (ClockValue)this.Singleton;
clockOpions.ClockImage = PictureHelper.FilePath + att2.Element("Image").Value.ToString();
clockOpions.Music = PictureHelper.FilePath + att2.Element("Music").Value.ToString();
}
//_clockOpions = clockOpions;
this.Singleton = (ClockValue)clockOpions;
}
Ссылку на сво-во "Singleton.ClockImage" я бросил на двух контролах.
<Grid>
<Grid.DataContext>
<viewModel:ClockViewModel/>
</Grid.DataContext>
<Image Source="{Binding Singleton.ClockImage, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" x:Name="Avatar" Stretch="Uniform" VerticalAlignment="Center" HorizontalAlignment="Center" StretchDirection="DownOnly" />
</Grid>
на первом контроле (Root) не происходит ни каких изменений. Второй контрол, который открывается в первом контроле (Canvas.Child.Add), загружает изображение с указанного пути, но после этого значение Source не обновляется. Это я определил, создав третий контрол, который так же открывается в первом контроле (Root). Он изменяет путь к другому фалу, обновляя сво-во Singleton.ClockImage.
Сво-во Singleton.ClockImage обновляется, но сугубо в пределах объявленного контрола. Так это значение и хранится, не изменяясь.
Подскажите, где ошибка? Я уже всё испробовал. Пересмотрел несколько примеров. Ни каких результатов.
Проект в студию. Так - ничего не понятно.
Разобрался) Бросил Command на главное окно, которое изменяет объявленный в нём же три DepencyProperty, повесил на каждое сво-во событие Change. В общем всё нормально. Спасибо.