Silverlight обновляет изображение в зависимости от переменной, хранящейся в IsolatedStorage - PullRequest
3 голосов
/ 22 сентября 2011

Я довольно новичок в Silverlight, и у меня есть некоторые проблемы с моим приложением. Я сохраняю дату приложения в базе данных и в IsolatedStorage.

У меня есть элемент управления изображением в верхней части пользовательского интерфейса, где пользователь всегда может видеть текущую дату приложения. Я использую изображение, потому что я создал несколько стильных изображений для представления даты в формате мм.гггг.

Я установил URI элемента управления изображением на главной странице Authentication_LoggedIn ():

   //setez luna curenta in isolatedStorage
   adminUtilizContext.GetSetariParticulare(4, 0, (op) =>
   {
        foreach (var item in op.Value)
        {
            if (IsolatedStorageSettings.ApplicationSettings.Contains("lunaCurenta"))
                IsolatedStorageSettings.ApplicationSettings["lunaCurenta"] = item.Substring(2);
            else
                IsolatedStorageSettings.ApplicationSettings.Add("lunaCurenta", item.Substring(2));

            Uri uri;
            uri = new Uri("/Indeco.SIEF;component/Images/Calendar/"+item.Substring(2)+".png", UriKind.RelativeOrAbsolute);
            dataLuna.Source = new BitmapImage(uri);                    
        }
    }, null);

xaml выглядит так:

    <StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">                
        <Image  Name="dataLuna" HorizontalAlignment="Right"/>                                
    </StackPanel>

Работает нормально, но проблема появляется, когда пользователь меняет текущую дату. В базе данных и IsolatedStorage хранится правильно. Я изменяю источник изображения, но новое изображение не появляется, пока я не обновлю страницу вручную.

Подскажите, пожалуйста, как я могу сделать это автоматически, без необходимости вручную обновлять страницу!

С уважением.

Код, в котором пользователь изменяет дату, находится в ViewModel (CurrentConfigurationViewModel.cs) основного пользовательского интерфейса (CurrentConfigurations.xaml). Существует комбинированный список с месяцами, а SelectedItemChanged автоматически обновляет базу данных и IsolatedStorage. поместите код, который вы видели в моем предыдущем комментарии. Для года тоже есть элемент управления NumericUpDown, который работает так же. Но сейчас давайте поговорим о месяце, а после этого я сам сделаю это за год: D! еще раз спасибо A print screen with the change date UI and the code i wrote for updating the Image source for the up-right corner (date) Как вы можете видеть на этом рисунке, когда пользователь вошел в систему в приложении, дата была апрель 2011 г. (вверху справа), и после того, как я изменил месяц, он по-прежнему отображает старую дату, и я проверил ее в БД в изолированном хранилище, и, похоже, все в порядке Там вы можете увидеть код, который я написал, чтобы обновить источник изображения тоже.

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011

Вы можете попытаться настроить свойство, содержащее изображение, а затем привязать источник изображения к этому свойству. Вашему классу необходимо реализовать интерфейс INotifyPropertyChanged, а затем вы можете сообщить своему элементу управления Image, что ваше свойство изменилось, и он перезагрузит изображение. Надеюсь, это поможет. :)

Если это ваш код, то вы генерируете совершенно новую MainPage и устанавливаете ее dataLuna ImageSource, а не исходные страницы, которые контролирует dataLuna.

Я рад, что смог помочь.

1 голос
/ 22 сентября 2011

Мое предложение будет вызывать событие со страницы / элемента управления, где происходит изменение даты.На главной странице вы можете подписаться на событие и перезагрузить изображение.Надеюсь, это поможет.

0 голосов
/ 23 сентября 2011

Привет всем вам, ребята, и еще раз спасибо за ваш интерес! Я решил свою проблему следующим образом:

 var mp = ((Application.Current.RootVisual as ContentControl).Content as UserControl).Content as Indeco.SIEF.MainPage;
        Debug.Assert(mp != null); 

 Uri uri;
 uri = new Uri("/Indeco.SIEF;component/Images/Calendar/" + id.ToString() + ".png", UriKind.RelativeOrAbsolute);
 mp.dataLuna.Source = new BitmapImage(uri);
...