2017-05-14 9 views
-1

창이 ListBox 및 TextBlock을 포함하고 있으며, ListBox에서 선택 항목이 변경 될 때 TextBlock을 업데이트하려고합니다.OnPropertyChanged가 UI를 업데이트하지 않습니다.

class ViewModelMain : ViewModelBase 
{ 
    public ObservableCollection<MemEntity> items { get; set; } 
    public object SelectedItem 
    { 
     get 
     { 
      return _selectedItem; 
     } 
     set 
     { 
      _selectedItem = SelectedItem; 
      OnPropertyChanged("SelectedItem"); 
     } 
    } 

    public object _selectedItem { get; set; } 

    public ViewModelMain() 
    { 
     items = new ObservableCollection<MemEntity> { 
     new MemEntity{s = "a", Correct = 2, Incorrect = 1}, 
     new MemEntity{s = "b"}, 
     new MemEntity{s = "c"} 
     }; 
    } 
} 

이 ViewModelBase입니다 :

나는이 클래스가

class ViewModelBase : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged(string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

보기 :

<ListBox x:Name="items" SelectedItem="{Binding SelectedItem}" ItemsSource="{Binding items}" DisplayMemberPath="s"/> 
<TextBlock Text="{Binding SelectedItem.s}"/> 

내가 지금 상자에 모든 것을 알았는데,하지만 작동하지 않습니다 . 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

'_selectedItem = selectedItem가, '아무것도하지 않는다. 당신은'value'를 사용하지 않는 세터를 가지고 있습니다. '_selectedItem = value; '만들기 – ASh

+0

selectedItem에 대해 양방향 바인딩 모드를 설정하려고 시도하십시오 –

답변

2

_selectedItem = SelectedItem; 아무 것도하지 않습니다. value을 사용하지 않는 설정자가 있습니다. (concreate 유형)를 백업 전용 필드 속성을 만들 _selectedItem = value;

사용 표준 조각을 확인하십시오

private MemEntity _selectedItem; 
public MemEntity SelectedItem 
{ 
    get 
    { 
     return _selectedItem; 
    } 
    set 
    { 
     _selectedItem = value; 
     OnPropertyChanged("SelectedItem"); 
    } 
} 
+0

와우! 얼마나 대단한 가깝습니다. 부끄러운 실수는 있지만, 그것을 분류 해 주셔서 감사합니다. – Pelle

+0

@ Pelle 이것은 기본적으로 이전 질문에 제공된 대답에서 내가 보여준 것의 정확한 속임수입니다. – Nkosi

+0

@ Nkosi, 이전 Q를 열었지만 두 번째 대답으로 스크롤하지 않았습니다. 참으로 복제 대답이기 때문에 동정. – ASh