2009-04-21 4 views
0

기본적으로, 색상의 목록과 목록 상자 항목에 대한 정의 DataTemplate이 있습니다다시 적용 템플릿은 프로그래밍 방식

이제
<DataTemplate x:Key="colorItemDataTemplate"> 
    <Border x:Name="borderInner" BorderBrush="Black" BorderThickness="1" Background="{Binding Brush}" Width="11" Height="11" /> 
</DataTemplate> 

, 내가 목록 상자에 항목의 무리를 추가 한 다음 목록 상자를 설정할 때. ItemsSource 속성을 내 목록에 추가하면 목록 상자가 올바르게 채워집니다.

적절한 이벤트 처리기가있는 슬라이더도 있습니다. 이벤트 핸들러 내에서 목록 상자의 항목 중 하나의 Brush 속성이 변경됩니다. 항목의 모양은 브러시 속성에 따라 다르므로 목록 상자에 변경 사항이 반영되어야합니다.

ItemsSource 속성을 재설정 할 수 있지만 모든 항목의 템플릿이 적용되어 있고 목록 상자에 200 개가 넘는 항목이있는 경우 매우 느립니다.

그래서 목록 상자에서 하나의 항목에 대해서만 템플릿을 새로 고치는 방법이 있습니까?

탄원

답변

1

나는 잘 모르겠다. Background을 속성에 바인딩 한 경우 속성을 변경하면 ListBoxItem의 배경이 자동으로 우회됩니다. 표시되지 않는 경우 DependencyProperty 또는 INotifyPropertyChanged을 사용하고 있는지 확인하십시오.

+0

덕분에,이 일했습니다. INotifyPropertyChanged를 구현하고 원하는대로 작동합니다. –

0

바인딩 변환기를 사용할 수 있습니다. 변환기 클래스에서 당신은 같은 논리를 가질 수

(pseudo-code) 
if (ListBoxItem.IsSelected) 
    return SpecialColorFromSlider 
else 
    return NormalListBoxColor