2

Well..its 사용자가 List 유형의 속성을 만들 때만 작동합니다.Silverlight : DependencyProperty (IList)의 양방향 바인딩이 작동하지 않습니다.

다음은 전체 시나리오입니다.

템플릿 컨트롤 (선택 상자가있는 다중 선택 콤보 상자) 사용자가 해당 ItemsSource로 List/ObservableCollection을 제공합니다. 컬렉션은 모든 유형 (직원, 의장, 사람 등)이 될 수 있습니다. ItemsSource의 DependencyProperty는 유형 IList입니다.

사용자는 (그가 검사 일부 항목을 표시하고 확인됩니다 항목을 다시 얻을 수 있도록)

지금 문제가 selectedItems를 함께이 두 방법은 DependencyProperty를 호출 selectedItems를 바인딩과 목록을 제공 할 수 있습니다 dp. 템플릿 화 된 컨트롤에서 IList 형식입니다. 사용자가 바인딩 한 경우 양방향 바인딩이 작동하지 않습니다 (예 : List<Person>). List<Person>List<object>으로 변경되면 작동합니다.

내가 옳지 않은 것은 무엇인지 알아낼 수 없다!

답변

1

SelectedItems 속성에 TwoWay 바인딩을 배치하는 것은 의미가 없습니다. 이는 컨트롤이 소스 객체의 속성에 IList을 구현하는 객체의 인스턴스를 만들고 할당해야 함을 의미합니다. 그러나 컨트롤에 실제 스타일을 지정하여 속성에 할당하는 방법을 알 수있는 방법이 없습니다.

대신 원본 개체에 이미 존재하는 List에도 OneWay 바인딩을 사용해야합니다. 그런 다음 컨트롤 작업은 ItemsSource 속성에 제공된 목록에서 해당 목록의 멤버를 간단히 추가하거나 제거하는 것입니다.

+0

그러나 OneWay Binding은 컨트롤의 목록에 멤버를 추가/제거 할 때 소스를 업데이트합니까? – Jags

+0

@James : 예. SelectedItem에 할당 된 구현 IList는 소스가 보유한 기존 목록입니다. 실제로 SelectedItem에 바인딩하는 소스의 속성은 ReadOnly 일 수 있습니다. 소스는 목록의 인스턴스를 내부적으로 만들고 해당 읽기 전용 속성에 노출합니다. 컨트롤에 의해 만들어진 해당 목록의 변경 사항은 원본이 보유한 목록에 직접 반영됩니다. – AnthonyWJones

+0

예 .. ItemsSource 속성에서 SelectedItems에 직접 멤버를 추가하는 것은 멋지게 작동합니다. 변경 내용은 소스에 반영됩니다. :) 그러나 내가 가진 의심은 "소스가 목록의 인스턴스를 내부적으로 만듭니다"(사용자 소스의 바인드 된 목록이 null이 아니어야 함을 확인해야합니다. 그렇다면 ListBox의 SelectedItems 속성 (multiSelection 모드 용)은 어떻게 작동합니까? 나는 사용자가 속성의 인스턴스를 생성해야한다고 생각하지 않습니까? [Plz 내가 잘못했거나 이해가 안되면 알려주세요.] – Jags

관련 문제