2011-05-15 4 views
1

콤보 상자에서 선택된 항목이 변경되면 콤보 상자에서 속성 변경을 변경하는 방법입니다. 사실 내가 원하는 것은 하나의 combobox에서 선택된 값이 변경되었을 때값을 기반으로 다른 combox가 채워질 것입니다. 다른 값을 선택할 때도 INotifyProperty 인터페이스가 사용되었으므로 속성 블록이 실행되지 않습니다.Silverlight MVVM의 Combobox에서 선택된 항목을 변경하면 PropertyChanged가 발생합니다.

나 다른 예를 더 조금 정교한 보자 : - 두 개의 콤보와 TextBlock이있다, 모두 콤보는 도시 이름을 포함, 그래서 사용자가 두 번째 콤보 상자에서 도시를 선택하면 방법이 있어야한다 이 두 블록 사이의 거리를 텍스트 블록에서 제공합니다. MVVM을 사용하여이 작업을 수행하고 있습니다. 문제는 두 번째 콤보 상자의 집합 블록을 호출 할 수 없다는 것입니다 (여기서 거리를 제공 할 메서드를 호출합니다).

답변

1

당신은 바인딩이 두 가지 방법을 보장, 당신은 MVVM을 사용하는 경우의 ViewModel 뒤에 또는 코드에서 속성에 selectedItem가 결합해야하고, 속성에서 INotifyPropertyChanged 구현 : 내가 뭐하는 거지

<ComboBox Name="ComboBox1" ItemsSource="{Binding Items}" 
      SelectedItem="{Binding Path=SelectedItem,Mode=TwoWay}" 
      DisplayMemberPath="TextProp" > 

public Collection<ItemClass> Items 
{ 
    get 
    { 
      return _items; 
    } 
    private set 
    { 
      if (value != _items) 
      { 
       _items = value; 
       RaisePropertyChanged("Items"); 
      } 
    } 
} 

public ItemClass SelectedItem 
{ 
     get 
     { 
      return _selectedItem; 
     } 
     set 
     { 
      if (value != _selectedItem) 
      { 
       _selectedItem = value; 
       RaisePropertyChanged("SelectedItem"); 
      } 
     } 
    } 
+0

을 정확히 당신은 여기에 작성했습니다. 저는 VIsual 스튜디오 2010을 사용하여 디버깅 중이며, combobox의 값을 변경할 때 debugger가 selectedItem 속성의 설정 블록으로 이동하지 않아서 필요한 결과를 얻지 못합니다. – Everest

+0

SelectedItem의 바인딩이 제대로 작동합니까? 나는. 프로그래밍 방식으로 코드에 설정하면 UI가 업데이트됩니까? –

+0

위의 대답의 문제는 Bindings의 순서가 잘못되었다는 것입니다. 먼저 ItemsSource 속성을 설정 한 다음 다른 방법 대신 SelectedItem 속성을 설정해야합니다. '' – Kolky

관련 문제