2012-03-26 3 views

답변

0

개체는 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> 속성 변경 이벤트가 발생 -> 뷰 속성

결합을 통해 변경할
+1

나는 OP가 그 반대의 질문을하고 있다고 생각합니다. View-> ViewModel이 아닌 ViewModel->보기 – GazTheDestroyer

+0

GazTheDestroyer가 정확합니다. – Beth

+0

나는 나의 대답을 편집했다, 나는 당신이 그것을 할 수있는 방법에 대한 설명을 추가했다. –

1

일반적으로 MVVM 컨트롤은 편집 할 때 바운드 속성 (필드가 아님)을 즉시 업데이트합니다. ViewModel은 "상태"이며보기는 해당 상태를 보는 한 가지 방법 일뿐입니다.

컨트롤을 편집 할 때마다 컨트롤에서 ViewModel을 업데이트해야합니다. 그런 다음 ViewModel은 메뉴 명령이 호출 될 때이를 XML로 저장할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 문제는 뷰에 대한 데이터를 가져 오려면 메소드 호출이 필요하다는 것입니다. 이 메서드는 데이터가 필요하지 않으면 일반적으로 호출되지 않습니다. 보기가 변경되면 데이터가 자동으로 업데이트되지 않습니다. – Beth

+0

원하는 시퀀스가 ​​무엇인지 아직 확실하지 않습니다. 데이터를 가져 오는 역할을하는 ViewModel입니다. 뷰가 어떤 시점에서 데이터 검색을 트리거해야하는 경우 ViewModel에서 명령을 노출하고 뷰 (OP의 메뉴)에서 호출합니다. – GazTheDestroyer

+0

ViewModel이 뷰를 트리거하여 자체적으로 데이터를 검색해야합니다. 보기에는 메뉴 항목을 클릭하여 ViewModel로 다시 보낼 때 컨트롤 자체에서 메서드 호출로 캡처해야하는 상태가 있습니다. – Beth

0

TextBox에서 작성한 직후에 메뉴 항목을 클릭하면 viewmodel이 업데이트되지 않는다는 문제점이있었습니다. 매개 변수 UpdateSourceTrigger =하여 PropertyChanged와

, 그것은 텍스트 상자 근무 :

<TextBox Grid.Column="5" Grid.Row="7" Text="{Binding SelectedPerson.Room, UpdateSourceTrigger=PropertyChanged}"></TextBox> 

그러나 불행히도 DatePickers에 대한 ...

이상한 일이 그 대신 메뉴 항목의 버튼을 클릭하면, DatePicker가 뷰 모델을 업데이트 중입니다. 지금 버그 픽스를 찾을 시간이 없기 때문에 메뉴 항목을 버튼으로 변경합니다.


편집 : 문제는 메뉴 항목이 아니라 메뉴 자체입니다. menuitem을 메뉴 밖으로 옮기면 작동합니다.

관련 문제