내 ViewModel의 필드에 바인딩 된 내 View의 컨트롤에 종속성 속성이 있습니다. 사용자가 메뉴 항목을 클릭하면 해당 컨트롤의 값을 업데이트하여 ViewModel에서 XML 파일로 저장할 수 있도록합니다. ViewModel에서 View가 해당 속성을 업데이트하도록 요청하는 올바른 메커니즘은 무엇입니까?ViewModel에서 WPF/MVVM의보기에서 업데이트를 요청하려면 어떻게해야합니까?
답변
개체는 INotifyPropertyChanged
인터페이스를 구현해야하고 속성 때문에 속성에 만들어진 모든 변화는 바인딩 메커니즘을 통해 볼 캐스케이드 될이
private string _property;
public string Property
{
get { return _property; }
set
{
if(_property == value) return;
_property = value;
RaisePropertyChanged("Property");
}
}
처럼 보일 것입니다.
메뉴 항목 명령 속성은보기 모델에서 선언 된 명령에 바인딩되며보기 모델에서 메서드를 트리거하고 속성 값을 설정합니다. 변경보기로 케스케이드 될 것이다 : -> menuItem.Command.Execute -> viewModel.method -> 변경 뷰 모델 속성 -
menuItem.Click> 속성 변경 이벤트가 발생 -> 뷰 속성
결합을 통해 변경할
일반적으로 MVVM 컨트롤은 편집 할 때 바운드 속성 (필드가 아님)을 즉시 업데이트합니다. ViewModel은 "상태"이며보기는 해당 상태를 보는 한 가지 방법 일뿐입니다.
컨트롤을 편집 할 때마다 컨트롤에서 ViewModel을 업데이트해야합니다. 그런 다음 ViewModel은 메뉴 명령이 호출 될 때이를 XML로 저장할 수 있습니다.
답변 해 주셔서 감사합니다. 문제는 뷰에 대한 데이터를 가져 오려면 메소드 호출이 필요하다는 것입니다. 이 메서드는 데이터가 필요하지 않으면 일반적으로 호출되지 않습니다. 보기가 변경되면 데이터가 자동으로 업데이트되지 않습니다. – Beth
원하는 시퀀스가 무엇인지 아직 확실하지 않습니다. 데이터를 가져 오는 역할을하는 ViewModel입니다. 뷰가 어떤 시점에서 데이터 검색을 트리거해야하는 경우 ViewModel에서 명령을 노출하고 뷰 (OP의 메뉴)에서 호출합니다. – GazTheDestroyer
ViewModel이 뷰를 트리거하여 자체적으로 데이터를 검색해야합니다. 보기에는 메뉴 항목을 클릭하여 ViewModel로 다시 보낼 때 컨트롤 자체에서 메서드 호출로 캡처해야하는 상태가 있습니다. – Beth
TextBox에서 작성한 직후에 메뉴 항목을 클릭하면 viewmodel이 업데이트되지 않는다는 문제점이있었습니다. 매개 변수 UpdateSourceTrigger =하여 PropertyChanged와
, 그것은 텍스트 상자 근무 :<TextBox Grid.Column="5" Grid.Row="7" Text="{Binding SelectedPerson.Room, UpdateSourceTrigger=PropertyChanged}"></TextBox>
그러나 불행히도 DatePickers에 대한 ...
이상한 일이 그 대신 메뉴 항목의 버튼을 클릭하면, DatePicker가 뷰 모델을 업데이트 중입니다. 지금 버그 픽스를 찾을 시간이 없기 때문에 메뉴 항목을 버튼으로 변경합니다.
편집 : 문제는 메뉴 항목이 아니라 메뉴 자체입니다. menuitem을 메뉴 밖으로 옮기면 작동합니다.
- 1. Facebooker2를 사용하여 권한을 요청하려면 어떻게해야합니까?
- 2. ViewModel에서 컬렉션을 처리하려면 어떻게해야합니까?
- 3. 기본 저장소 목록을 Maven에 요청하려면 어떻게해야합니까?
- 4. 레일즈 페이지에서 레일스 페이지를 요청하려면 어떻게해야합니까?
- 5. 보석으로 업데이트를 표시하려면 어떻게해야합니까?
- 6. viewmodel에서 프로그래밍 방식으로 목록보기 항목을 선택하려면 어떻게해야합니까?
- 7. viewModel에서 ViewContext를 사용할 수있게하려면 어떻게해야합니까? 내 컨트롤러에서
- 8. 개체 속성 업데이트를 리팩터링하려면 어떻게해야합니까?
- 9. 데이터베이스 업데이트를 레일즈에 연기하려면 어떻게해야합니까?
- 10. 클라이언트 응용 프로그램에 제어권을 반환하고 API에서 입력을 다시 요청하려면 어떻게해야합니까?
- 11. 사용자가 내 앱과 Google 계정을 연결하도록 요청하려면 어떻게해야합니까?
- 12. gstatic.com에서 여러 이미지를 한꺼번에 요청하려면 어떻게해야합니까? (Google 이미지의 미리보기 이미지)
- 13. IOS의 XMPP : 더 많은 프리젠 스를 요청하려면 어떻게해야합니까?
- 14. 필드 값을 얻기 위해 MongoDB에 자바 스크립트를 평가하도록 요청하려면 어떻게해야합니까?
- 15. OData4J를 사용하여 OData 서비스 작업에서 JSON 데이터를 요청하려면 어떻게해야합니까?
- 16. ViewModel에서 바인딩을 만드는 방법
- 17. ToggleButton을 ViewModel에서 바꾸는 방법?
- 18. IDataErrorInfo를 사용하여 ViewModel에서 View에 유효성 검사 오류 업데이트를 적용하는 방법은 무엇입니까?
- 19. 위치 업데이트를 영구히 유지하는 방법은 무엇입니까?
- 20. 데이터베이스 대량 업데이트를 효율적으로 수행하려면 어떻게해야합니까?
- 21. SDK 업데이트를 최신 상태로 유지하려면 어떻게해야합니까?
- 22. Mac App Store 앱에서 업데이트를 확인하도록하려면 어떻게해야합니까?
- 23. 외부 jquery .ajax 호출에서 내 viewmodel에서 observableArray를 참조하려면 어떻게해야합니까?
- 24. MVVM ViewModel에서 메시징보기
- 25. 다른 ViewModel에서 MainWindow로보기 추가하기?
- 26. ViewModel에서 View로 콜백
- 27. XAML의 ViewModel에서 UIElement 참조하기
- 28. ViewModel에서 IObservable을 구조화하고 문서화하십시오.
- 29. {get; 세트; } ViewModel에서 사용
- 30. viewmodel에서 listview를 업데이트하십시오.
나는 OP가 그 반대의 질문을하고 있다고 생각합니다. View-> ViewModel이 아닌 ViewModel->보기 – GazTheDestroyer
GazTheDestroyer가 정확합니다. – Beth
나는 나의 대답을 편집했다, 나는 당신이 그것을 할 수있는 방법에 대한 설명을 추가했다. –