Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MVVM. Не обновляется значение сво-ва, объявленного в нескольких контролах

74K
13 декабря 2011 года
Serdceder
6 / / 16.09.2011
Здравствуйте.

Пытаюсь создать приложение, работающее по принципу 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 обновляется, но сугубо в пределах объявленного контрола. Так это значение и хранится, не изменяясь.

Подскажите, где ошибка? Я уже всё испробовал. Пересмотрел несколько примеров. Ни каких результатов.
9.7K
15 марта 2012 года
Vitamant
228 / / 07.02.2011
Проект в студию. Так - ничего не понятно.
74K
15 марта 2012 года
Serdceder
6 / / 16.09.2011
Разобрался) Бросил Command на главное окно, которое изменяет объявленный в нём же три DepencyProperty, повесил на каждое сво-во событие Change. В общем всё нормально. Спасибо.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог