2013-11-15 5 views
0

MVVM 스키마를 따르는 앱이 있습니다. 여러보기 및보기 모델이있는 곳. 내 mainPage에서 선택한 요소의 정보로 업데이트하고 싶은 텍스트 블록이 있습니다.뷰 요소의 MVVM 업데이트

앱을 시작하면 mainviewmodel에서 값을 삽입하여 바인딩을 테스트하므로 모든 것이 작동합니다. 코드 인 경우 다음과 같이이가 올바르게 표시됩니다

colorOfElement = "Test"; 

mainviewmodel

private string _colorOfElement; 
    public string colorOfElement 
    { 
     get 
     { 
      return _colorOfElement; 
     } 
     set 
     { 
      _colorOfElement = value; 

      NotifyPropertyChanged("colorOfElement"); 

     } 
    } 

에서

<TextBlock Text="{Binding colorOfElement}" Grid.Row="1"/> 

코드 ....... 그런 다음 사용자가 요소와 상호 작용할 때 새 viewmodel에서 이벤트가 발생합니다. 여기서 mainviewmodel에 대한 참조가 있으므로 문자열 colorOfElement를 쉽게 업데이트 할 수 있습니다.

private MainViewModel mv; 
...... 
    public void MouseDown(ManipulationStartedEventArgs obj) 
    { 
     FrameworkElement MovingElement = (FrameworkElement)obj.OriginalSource; 

     Canvas canvas = FindParentOfType<Canvas>(MovingGear); 

     obj.ManipulationContainer = canvas; 
     obj.Handled = true; 

     testViewModel viewModel = (testViewModel)MovingElement.DataContext; 

     mv.colorOfElement = viewModel.model.Color; 
    } 

이 함수가 실행될 때 mainviewmodel로 보내지고 NotifyPropertyChanged가 실행됩니다. 그러나 Application.Page 뷰에서 변수의 업데이트를 볼 수는 없지만 코드에서는 변수가 변경됩니다. 이 바인딩 문제에 대한 아이디어가 있습니까?

응답 datacontext를 테스트했는데 모든 것이 작동 중이므로 문제점이 공개 클래스에 있습니다.

 public class MainViewModel : ViewModelBase 

여기에는이 기능을 사용하기위한 INotifyPropertyChanged 인터페이스가 포함되어야합니다. 그래서 간단한 해결책이를 추가하고 얻을 수 있습니다 : 다음

 public class MainViewModel : ViewModelBase, INotifyPropertyChanged 

당신이 :)

+0

NotifyPropertyC 교수형이보기에 의해 수신되지 않습니다. MainViewModel이 업데이트 할 뷰의 DataContext로 설정되어 있습니까? – venerik

+0

시작시 변수를 설정할 수있는 DataContext를 뷰에 설정했습니다. 나는 그것이 받아 들여지지 않는다는 것에 동의하지만 나는 이유를 모른다. – JTIM

답변

1

이 확인 갈 수 있다는 :

  • 의 DataContext는 MainViewModel
  • 의 오른쪽 인스턴스로 설정되어
  • MainViewModel에서 INotifyPropertyChanged 인터페이스를 구현합니다.
+0

인터페이스가 채택되지 않았다는 걸 잊어 버려서 고맙습니다. – JTIM