2010-11-29 4 views
0

TextBox 컨트롤이 포함 된 ItemsControl에 개체 목록을 바인딩합니다.WPF 목록에 동시에 포함 된 여러 항목의 바인딩 속성 업데이트

바인드 개체의 배경색 속성을 기반으로 텍스트 상자 배경색을 변경할 수 있기를 원합니다.

그것은 INotifyPropertyChanged 인터페이스와 완벽하게 작동하지만, 컨트롤을 하나씩 업데이트해야하기 때문에 엄청난 양의 시간이 걸리는 1000 개의 개체를 업데이트해야한다고 생각합니다.

내 모든 개체를 배경색으로 업데이트하고 개체 대신 개체 단위로 바인딩을 업데이트하는 방법에 대한 조언이 있습니까?

감사합니다,

매트

+0

는 "backgroundColor로"속성 이름 또는 null과 함께하여 PropertyChanged 이벤트를 트리거하고 있습니까? – Guy

+0

일반적으로 ItemTemplate을 사용하여 바인딩하려는 객체의 색상으로 색상을 명시 적으로 지정하지 않고 ItemTemplate을 사용하여 항목의 배경색에 스타일을 적용해야합니다. 또한 ItemsControl 대신 VirtualizingStackPanel (예 : ListBox)에서 파생 된 컨트롤을 사용하면 무료 UI 가상화를 얻을 수 있습니다 (사용자가 볼 수 없으면 모든 UI 객체가 업데이트되지 않습니다) – Guy

+0

속성 이름이 " 배경색" – Matx

답변

1

당신이 가상화를 사용하는 경우에만 볼 수있는 항목을 업데이트해야합니다 - 현재 유일하게 볼 수있는 항목에 대한 속성 변경 사항을 추적합니다 일반적으로 항목 컨트롤을. 그러나 기본 ItemsControl을 사용하는 경우 가상화가 기본적으로 해제됩니다. 전원을 켜려면, 당신은 CanContentScrollScrollViewerTrue로 설정 포함하는 사용자 정의 템플릿을 제공해야하고, 당신은 또한 중 하나 컨트롤 템플릿에서, 또는 ItemsPanel를 통해하는 VirtualizingStackPanel를 사용해야합니다 - 이것은 이전의 접근 방식을 보여줍니다

<ItemsControl ItemsSource="...whatever..."> 
    <ItemsControl.Template> 
    <ControlTemplate TargetType="ItemsControl"> 
     <ScrollViewer CanContentScroll="True"> 
     <VirtualizingStackPanel IsItemsHost="True" /> 
     </ScrollViewer> 
    </ControlTemplate> 
    </ItemsControl.Template> 
</ItemsControl> 

가상화는 여러 가지 방법으로 많은 수의 목록 항목에서 성능을 향상시킵니다. 그것은 당신의 시나리오에 도움이되지만, 성능의 다른면을 향상시킬 수도 있습니다. 문제가없는 것은 아니지만 다른 솔루션을 시도하기 전에 여기에서 먼저 시도해 보겠습니다.

0

마침내 왜 내 UI를 업데이트하는 데 너무 오래 걸리는지 알게되었습니다. Byt 그런데, 내가 달성하려고하는 것은 일종의 스프레드 시트 그리드입니다. 내 셀 컨테이너는 테두리가 보이는 경계선이었습니다. 셀 선택을 기반으로 테두리 컨트롤 배경색을 업데이트했습니다. 테두리 컨트롤의 테두리를 사용하지 않으면 바로 내 문제가 해결되었습니다. UI 업데이트 시간은 4-5 초에서 순간적으로 변경되었습니다.

답장을 보내 주셔서 감사 드리며, 더 많은 프로젝트를 개선하기 위해 제안을 구현하려고합니다.

감사

매트

관련 문제