문제

MVVM 체계에 따라 앱이 있습니다. 위치와 ViewModels가 여러 개 있습니다. 내 메인 페이지에서는 선택한 요소의 정보로 정보로 업데이트하고자하는 TextBlock이 있습니다.

앱을 시작하면 MainviewModel에서 값을 삽입하여 바인딩을 테스트하여 모든 것이 여기에서 작동합니다. 코드가 다음과 같습니다.

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

mainviewmodel의 코드

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

            NotifyPropertyChanged("colorOfElement");

        }
    }
.

......

colorOfElement = "Test";
.

이게 올바르게 표시됩니다. 사용자가 요소와 상호 작용하면 이벤트가 새 뷰 모델 내부에서 해고되면 여기에서는 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가 해고됩니다. 그러나 뷰를 보여주는 응용 프로그램에서는 변수의 업데이트를 볼 수 없지만 변수가 변경됩니다. 이 바인딩 문제에 대한 모든 아이디어?

답변 DataContext를 테스트 했으므로 모든 작업이 일하고 있었기 때문에 공개 수업에있었습니다.

     public class MainViewModel : ViewModelBase
.

여기에서는 기능을 활성화 할 수있는 INotifyPropertyChanged 인터페이스를 포함해야합니다. 따라서 간단한 해결책은이를 추가하고 얻는 것입니다 :

     public class MainViewModel : ViewModelBase, INotifyPropertyChanged
.

다음가는 것이 좋습니다 :)

도움이 되었습니까?

해결책

다음을 확인하십시오.

  • DataContext는 mainviewmodel
  • 의 올바른 인스턴스로 설정됩니다.
  • mainviewModel은 inotifyPropertyChanged 인터페이스
  • 를 구현합니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top