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
당신이 :)
NotifyPropertyC 교수형이보기에 의해 수신되지 않습니다. MainViewModel이 업데이트 할 뷰의 DataContext로 설정되어 있습니까? – venerik
시작시 변수를 설정할 수있는 DataContext를 뷰에 설정했습니다. 나는 그것이 받아 들여지지 않는다는 것에 동의하지만 나는 이유를 모른다. – JTIM