2011-09-22 4 views
3

저는 실버 라이트가 새롭고 응용 프로그램에 몇 가지 문제가 있습니다. 데이터베이스 및 IsolatedStorage에 응용 프로그램 날짜를 보관합니다.Silverlight는 IsolatedStorage에 저장된 변수에 따라 이미지를 새로 고칩니다.

UI 상단에 사용자가 응용 프로그램의 현재 날짜를 항상 볼 수있는 Image 컨트롤이 있습니다. 이미지를 사용하기 때문에 세련된 이미지를 만들어 mm.yyyy 형식으로 표시합니다.

나는 mainpage Authentication_LoggedIn()에서 이미지 컨트롤의 URI를 설정합니다

//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는 올바르게 저장됩니다. 이미지 소스를 변경하지만 수동으로 페이지를 새로 고침 할 때까지 새 이미지가 표시되지 않습니다.

수동으로 페이지를 새로 고치지 않고도 자동으로 어떻게 할 수 있습니까?

감사합니다.

사용자가 날짜를 변경하는 코드는 해당 UI (CurrentConfigurations.xaml)의 ViewModel (CurrentConfigurationViewModel.cs)에 있습니다. 개월이 포함 된 콤보 상자가 있으며 SelectedItemChanged는 데이터베이스와 IsolatedStorage를 자동으로 업데이트합니다. 이전 코드에서 보았던 코드를 넣었습니다. 1 년 동안 NumericUpDown 컨트롤도 동일하게 작동합니다.하지만 지금은 그 달에 대해 이야기하고 나서 1 년 동안 직접 해 보겠습니다. 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 년 4 월 4 일 (오른쪽)이었을 때 알 수 있듯이 월을 수정하면 이전 날짜가 표시되고 분리 된 저장소의 Db에서 확인되었습니다. 그리고 ok 일 것 같습니다. 이미지 소스를 업데이트하기 위해 내가 작성한 코드를 볼 수 있습니다.

+1

+1 코드/XAML과 좋은 디테일을 공급. –

답변

2

이미지를 보유하고 이미지 소스를이 속성에 바인딩하는 속성을 설정하려고 할 수 있습니다. 클래스가 INotifyPropertyChanged 인터페이스를 구현해야하며 Image 컨트롤에 속성이 변경되었음을 알릴 수 있으며 이미지가 다시로드됩니다. 도움이되기를 바랍니다. :)

당신의 코드라면 완전히 새로운 MainPage를 생성하고 dataLuna ImageSource를 설정하고 dataLuna가 제어하는 ​​원본 페이지가 아닙니다.

내가 도울 수있어서 기쁩니다.

+0

코드 숨김에서 직접 ImageSource를 설정하는 것은 바인딩과 같은 방식으로 작동해야합니다 (MVVM 스타일 대신 오래된 학교 코드). 문제의 원인이 다른 것 같습니다. –

+0

귀하의 질문에 대한 답변을 (귀하의 의견에) 실제 답변과 나는 그것을 upvote 것입니다 (그리고 내 자신의 대답을 삭제합니다).당신이 실제 코드를 볼 때 얼마나 단순한 지 놀라 울 정도 :) –

+0

코드를보고 그것이 무엇을하기로되어 있는지 그리고 실제로 그것을 수정하는 것이 훨씬 쉽다는 것을 알고 있다면 맞습니다. :) – BigL

1

내 제안은 날짜가 변경되는 페이지/컨트롤에서 이벤트를 시작하는 것입니다. 기본 페이지에서 이벤트에 가입하고 이미지를 다시로드 할 수 있습니다. 희망이 도움이됩니다. !

+0

여기의 문제는 단순한 초보자 오류입니다. - 페이지의 새 인스턴스 만들기, 속성에 값 할당, 전체 페이지 삭제 –

0

하이에게 다시 관심있어 당신 남자와 감사의 모든 나는 그렇게 내 문제를 해결했습니다

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); 
관련 문제