2016-09-22 3 views
0

Managed UWP Behavior SDK를 사용하는 UWP 응용 프로그램이 있습니다. ObservableCollection 중 하나 인 두 개의 종속성 속성이있는 사용자 지정 동작을 작성했습니다.Xaml 동작 DP가 업데이트되지 않았습니다.

컬렉션의 항목을 업데이트 할 때마다 컬렉션에 대해 PropertyChanged가 호출되는지 확인합니다.

그러나 종속성 속성은 업데이트되지 않습니다.

내 코드 :

<trigger:CustomBehavior ItemIndex="{x:Bind ItemIndex}" 
    Presences="{Binding ElementName=Box, 
     Path=DataContext.CustomCollection, 
      UpdateSourceTrigger=PropertyChanged, Converter={StaticResource TestConverter}}" /> 

내 TestConverter 내가 컬렉션에서 항목을 업데이트 할 때 updatesource 트리거가 작동하고 있음을 나에게 보여줍니다. 그러나 내 동작의 종속성 속성은 Changed 이벤트를 발생시키지 않습니다. 전체 사용자 지정 컬렉션을 변경하면 DP가 업데이트되고 항목을 하나만 변경하면 그렇지 않습니다.

Research는 지금까지 DependencyObject.SetValue가 개체가 변경되었는지 확인하고 하나의 항목이 변경된 경우 컬렉션이 전혀 변경되지 않았다고 생각합니다. 이것은 사실입니까, 그렇다면 어떻게이 문제를 극복 할 수 있습니까?

감사

+0

참고 사항 : "컬렉션의 항목을 업데이트 할 때 updatesource 트리거가 작동하고 있습니다."는 일반적인 오해입니다. 단방향 바인딩에서'UpdateSourceTrigger = PropertyChanged'를 설정하는 것은 효과가 없으며, 대상이 변경 될 때 바인딩의 소스가 업데이트되는 방식을 제어합니다. 즉, 양방향 또는 단방향에서 소스 바인딩에서만 효과적입니다. 즉, 콜렉션의 항목을 업데이트 한 다음 PropertyChanged 이벤트를 발생 시키면 콜렉션 * 인스턴스 *가 변경되지 않고 PropertyChanged 이벤트가 자동으로 무시되므로 아무런 효과가 없습니다. – Clemens

+0

전체 컬렉션을 바꾸거나 Presences 속성의 PropertyChangedCallback에있는'INotifyCollectionChanged.CollectionChanged' 이벤트에 대한 핸들러를 등록하십시오. – Clemens

+0

아름다운. 이 질문을 받아 들일 수 있도록 답변으로 게시 할 수 있습니까? – WJM

답변

2

모음 형 종속성 속성은 일반적으로 가장 기본적인 수집 유형, IEnumerable로 선언되어야한다. 이렇게하면 INotifyCollectionChanged을 구현하는 것을 포함하여 다양한 실제 컬렉션 유형을 ObservableCollection<T>과 같이 속성에 지정할 수 있습니다.

런타임시 콜렉션 유형이 실제로 인터페이스를 구현하는지 확인하고 가능하면 CollectionChanged 이벤트에 대한 핸들러 메소드를 첨부하고 분리하십시오.

관련 문제