2010-06-12 13 views
1

MVVM 패턴을 구현 한 Silverlight 응용 프로그램이 있습니다. 내 응용 프로그램에는 ComboBox가있는 자식 창이 있습니다. 내 콤보 상자의 ItemsSource 및 SelectedItem을 MyType의 속성 (ObservableCollection 유형) 및 속성에 적절하게 바인딩했습니다. MyType은 INotifyPropertyChanged에서 파생 된 "MODEL"입니다. 내 윈도우가로드되면이 속성에 값을 설정합니다. 하지만 내 콤보 상자는 선택한 항목을 표시하지 않습니다. ViewModel에서 선택한 항목에 바인딩 된 속성을 설정하면 PropertyChanged 이벤트가 null 인 것을 알게되었습니다. 아무도 도와 줄 수 있어요. 감사.PropertyChanged가 제대로 작동하지 않습니다.

+0

코드를 설명하는 것이 코드를 실제로 보여주는 것만 큼 도움이되지 않습니다. – AnthonyWJones

답변

0

당신이 설명했듯이, 바인딩 된 유일한 것은 ViewModel이지만 INotifyPropertyChanged를 구현하는 유일한 것은 MyType입니다. 아무것도 내 형식의 인스턴스에 바인딩되어 null 인 PropertyChanged 이벤트를 수신하지 못합니다.

ViewModel에 INotifyPropertyChanged를 구현하지 않은 것 같습니다.

0

PropertyChanged는 제대로 작동하므로 제대로 구현해야합니다. 변경된 INotifyProperty를 구현하는 것만으로는 충분하지 않습니다. 이벤트를 명시 적으로 호출해야합니다.

예를 들어,이 작동하지 않습니다

public class Model : INotifyPropertyChanged 
{ 
    public string Title { get; set; } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

을 위해 작동하는, 변경 한 속성을 제기해야합니다. 가장 쉬운 방법은이 같은 방법으로 로직을 캡슐화하는 것입니다 : 물론

public class Model : INotifyPropertyChanged 
{ 
    private string _title; 

    public string Title 
    { 
     get { return _title; } 
     set 
     { 
     _title = value; 
     RaisePropertyChanged("Title"); 
     } 
    } 

    protected void RaisePropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
     { 
     handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

} 

당신이 그것을 활용할 수 있도록 여러 모델에서 상속 할 기본 클래스의 이벤트 및 방법을 넣을 수 있습니다.

관련 문제