2011-02-17 1 views
0

Silverlight 프로젝트에 텍스트 상자와 데이터 격자가 있습니다. 텍스트 상자는 데이터 격자의 항목 개수가 0이거나 데이터 항목의 소스의 합계가 0 인 경우 활성화해야합니다.Silverlight RIA에서 DataGrid의 itemsource에 바인딩 할 때 NotifyPropertyChanged

텍스트 상자의 isEnabled 값을 데이터 항목의 ItemsSource.SourceCollection에 바인딩했습니다 IEnumerable. 이 데이터 모델을 bool로 변환하는 변환기를 만들었습니다.

Silverlight 페이지를 열고 데이터 격자를 바인드하면 변환기가 실행되고 예상대로 작동합니다. 그러나 합계 필드를 변경하거나 DataGrid의 행을 추가/삭제하면 아무 반응이 없습니다.

내 데이터 모델의 속성 변경 사항을 알리는 것과 관련이 있다고 생각하지만 잘 모르겠습니다.

이 문제를 해결하는 방법에 대한 의견이 있으십니까?

답변

0

예, 개체의 하위 속성에 바인딩하면 대상이 해당 값을 업데이트 할 수 있도록 특정 속성의 PropertyChanged 이벤트가 필요합니다.

예제에서 ItemsSource는 SourceCollection 속성의 PropertyChanged 이벤트를 발생시켜야합니다.

트리거 할 ItemsSource에 바인딩 한 다음 변환기에서 Sourcecollection 값을 사용하면됩니다.

예 :

<sdk:DataGrid Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="True" VerticalAlignment="Top"/> 
    <TextBox Text="{Binding ElementName=dg, Path=ItemsSource.Count}" VerticalAlignment="Bottom" HorizontalAlignment="Right"/> 

코드 : 제가 비슷한 질문을하고 뤽 당신이없는 항목이 변경이 발생하지 않을 경우, 이벤트 구현에서 INotifyPropertyChanged 한 필요 대답

 _items = new ObservableCollection<SomeClass>(); 
     _items.Add(new SomeClass() { Name = "a" }); 
     _items.Add(new SomeClass() { Name = "b" }); 
     _items.Add(new SomeClass() { Name = "c" }); 

     DataContext = _items; 

    private void testButton_Click(object sender, RoutedEventArgs e) 
    { 
     _items.Add(new SomeClass(){Name = "ha"}); 

    } 
+0

바인딩을 ItemsSouce로 변경해도 아무런 변화가 없습니다. – olve

+0

나 자신을 더 분명하게하기 위해 나는 그것을 편집했다. + observableCollection을 사용하는 것을 잊지 마십시오. –

+0

PagedCollectionViews를 사용하고 있습니다. 그것과 관련이있을 수 있습니까? – olve