2011-02-14 2 views
1

영문자 순 목록이 포함 된 ListBox가 있습니다. 각 문자에 대해 첫 번째 단어는 파란색으로, 다른 모든 단어는 흰색으로하고 싶습니다. 이전에는 적절한 전경색으로 TextBlock 컨트롤을 만들고 ListBox 컨트롤에 수동으로 추가하여 단어를 반복하면서이 작업을 수행했습니다. 비록 데이터 바인딩과 함께 이것을하고 싶습니다. 이러한 종류의 조건부 서식을 데이터 바인딩과 함께 적용하는 우아한 방법이 있습니까?Silverlight 데이터 바인딩 - 이전 요소를 기반으로 요소의 스타일을 어떻게 동적으로 변경합니까?

답변

1

이것은 일반적으로 ViewModel을 사용하는 일종의 것입니다. 당신이 할 수있는 것은 이런 걸 보이는 WordViewModel 클래스를 만드는 것입니다 (하지만 아마도에서 INotifyPropertyChanged 구현 등으로) : 당신이 당신의 ObservableCollection<WordViewModel>WordViewModel 인스턴스를 추가 할 때

public class WordViewModel 
{ 
    public string Word {get; set;} 
    public Color ForegroundColor {get; set;} 
} 

, 당신은 다음 해당 속성을 설정합니다 이전에 사용했던 것과 거의 동일한 로직을 기반으로합니다. 물론 "의 분리"의 전체 위반 될 모델의

<ListBox ItemsSource="{Binding MyWords}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Word}" ForegroundColor="{Binding ForegroundColor}" /> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

은 "foregroundColor의"를 갖는

귀하의 목록 상자는 다음과 같이 보일 것입니다. 깨끗하고 쉬운 방법이 있다면 View에서 가장 적절할 것입니다. 그러나 상황에 따라 XAML에서 더 나은 방법을 처리 할 수있는 사람이 없다면 ViewModel에 배치하는 것이 합리적이라고 생각합니다.

관련 문제