2012-03-21 2 views
0

DataGrid가 다른 데이터 소스 및/또는 클래스 객체에 바인딩되므로 런타임에 바인딩을 수행해야합니다. CA와 CB의 두 클래스가 있습니다. CB에는 바인딩을 설정하는 방법이 있습니다. 그러나 아래의 간단한 방법은 단방향 바인딩 만 설정합니다. 양방향 바인딩을 수행하는 방법? I.E. List<CA> 목록의 요소가 변경되면 DataGrid1이 자동으로 업데이트됩니다.WPF DataGrid 양방향 소스 바인딩을 프로그래밍 방식으로 <DataClass>

class CA 
{ 
    private int a = 1; 
    private string b = ""; 
    private bool c = true; 
    public int A { get { return a; } set { a = value; } } 
    public string B { get { return b; } set { b = value; } } 
    public bool C { get { return c; } set { c = value; } } 
} 

class CB 
{ 
    List<CA> datalist = new List<CA>(); 
    private void SetBinding(ref List<CA> ca, ref DataGrid dg) 
    { 
     dg.ItemsSource = ca; 
    } 
} 
+0

내가 그렇게 생각해야 할 이유가 없다면 ref로 ca 또는 dg를 넘겨서는 안된다는 점에 유의하는 것이 중요하다고 생각한다. (나는 상상할 수 없다.) –

답변

2

올바르게 바인딩하려면 클래스 CA가 INotifyPropertyChanged 인터페이스를 구현해야합니다. 참조 : http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx 그리고 모든 속성은 데이터 바인딩 된 컨트롤에 알리기 위해 propertyChanged 이벤트를 발생시켜야합니다.

은 여기에서 간단한 예를 찾을 수 있습니다 http://msdn.microsoft.com/en-us/library/ms229614.aspx

또한, 나는 데이터 바인딩과 ObservableCollection에 대신 목록을 사용하는 것이 좋습니다 것, 그것은 상자 밖으로에서 INotifyPropertyChanged 및 요소의 추가, 삭제 및 변경의 데이터 바인딩 된 컨트롤을 통지 이후.

+0

당신은 나를 때리지 만, ObservableCollection을 사용하면 OP가 INotifyPropertyChanged를 CA에 구현해야 함을 의미합니다. –

+0

물론 임의의 개체의 개별 속성에 대한 추적 변경은 없습니다. –

1

클래스 "CA"는 데이터 객체에 반영 될 CA 객체에 대한 변경 사항을 INotifyPropertyChanged를 구현해야합니다.

DataGrid에서 추가 및 제거되는 항목을 인식하려면 List 대신 ObservableCollection을 사용하거나 INotifyCollectionChanged를 구현하는 콜렉션을 사용해야합니다.

관련 문제