2010-12-14 8 views
0

이 내 뷰 모델입니다 -바인딩 WPF 및 데이터 컨텍스트

public class ViewModel 
{ 
    public ObservableCollection<Person> Persons { get; set; } 
} 

이것은 클래스 사람입니다 : 이제

public class Person : INotifyPropertyChanged 
{ 
    private string _firstName; 
    public string FirstName 
    { 
     get { return _firstName; } 
     set 
     { 
      _firstName = value; 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("FirstName")); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

는 사람의 FIRSTNAME 중 하나가 내가 어떤 작업을 수행 할 변경 될 때마다 , 메시지 상자를 들려 올릴 수 있습니다.

어떻게하면됩니까?

답변

1

당신은 일반적으로 당신의 사람 클래스마다 FIRSTNAME 변경됩니다하여 PropertyChanged 이벤트를 트리거 인터페이스에서 INotifyPropertyChanged를 사용합니다 INotifyPropertyChanged

public class Person : INotifyPropertyChanged 
{ 
    private string firstName; 
    public string FirstName 
    { 
     get { return this.firstName;} 
     set 
     { 
      this.firstName = value; 
      this.RaisePropertyChanged("FirstName"); 
      MessageBox.Show("Hello World"); 
     } 
    } 
} 

public event PropertyChangedEventHandler PropertyChanged; 

protected void RaisePropertyChanged(string propertyName) 
{ 
    PropertyChangedEventHandler propertyChanged = this.PropertyChanged; 
    if ((propertyChanged != null)) 
    { 
     propertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+1

MessageBox를 표시하는 방법은 Binding/DataContext 또는 INotifyPropertyChanged와 아무 관련이 없습니다. 내 추측은 OP가 MessageBox.Show() 속성을 설정하는 사람 내에서 더 찾고 있습니다 –

+0

@ Aaron- 오 정말 아론, 글쎄, 당신이 해석 할 수있는 방법을 모르겠다 "자, 때마다 사람의 이름 변경 중 일부 작업을 수행하고 싶습니다. 메시지 상자를 올리십시오. 어떻게합니까? ", 다른 방법. 큰 아이디어가 있다면 의견 대신 대답을 게시하십시오. – Gabe

+0

질문이 명확하지 않은 경우 OP에 추가 정보를 요청하십시오. 간단히 지적 했으므로 아마도 요소를 고려한 추가 경로를 제공 할 수 있습니다. –

1

를 구현해야합니다. 이렇게하면 뷰의 항목을 Person 클래스에 바인딩 할 수 있으며 데이터가 변경되면보기가 업데이트됩니다.

그러나 이름을 입력 할 때 메시지 상자를 팝업하려면보기에 몇 가지 코드가 있어야합니다. 이를 수행하는 한 가지 방법은 전에와 마찬가지로 INotifyProperty를 변경하여 FirstName을 변경하는 이벤트가 호출 될 때마다 MessageBox.Show를 사용하여보기의 모든 Person 객체에 변경하고 구독하는 것입니다. ObservableCollection의 CollectionChanged 이벤트를 사용하여 목록의 Person 객체를 추적하여 Person 객체가 모두 변경된 이벤트 핸들러에 연결되어 있는지 확인할 수 있습니다.

필자가 생각하기에 가장 좋은 방법은 특정 Person 개체를 인수로 사용하여 Person 클래스를 변경할 때마다 발생하는 Person 클래스가 아닌 ViewModel에서 이벤트를 만드는 것입니다. 이것은 ViewModel이 Person.FirstName을 변경할 수있는 유일한 것일 경우에만 작동하며 View는이를 효과적으로 ViewModel에 바인딩해야합니다.