2011-11-20 111 views
2

我一直在嘗試更改ListBox中的TextBlock的顏色,它從綁定中獲取它的顏色。更改綁定的LongListSelector或列表框的項目顏色

<TextBlock Text="{Binding Title}" TextWrapping="Wrap" Foreground="{Binding ItemColor, Converter={StaticResource ColorConverter}}" Style="{StaticResource posttitle}" d:LayoutOverrides="Width"/> 

下面是其中初始期間工作的轉換器渲染:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    if (value == null) 
     return new SolidColorBrush(Colors.Red); 

    Color colorValue = (Color)value; 

    return new SolidColorBrush(colorValue); 
} 

SelectionChanged事件期間,我分配了一個新的顏色像這樣的項目:

private void List_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var listbox = (LongListSelector)sender; 

    if (listbox.SelectedItem == null) 
     return; 

    MyItem item = (MyItem)listbox.SelectedItem; 

    if (item.Clicked) 
    { 
     // Change some value 
     item.Clicked = true; 
     item.ItemColor = new Color() { A = 0xFF, R = 0xBD, G = 0xB7, B = 0x6B }; 
    } 
} 

如果我把一個斷點並檢查datacontext,我可以看到源中的值已更改,但在視覺上LongListSelector不會改變外觀。綁定是通過ObservableCollectionItemColor通知更改。

任何幫助表示讚賞。

+0

顯然'ItemColor'沒有引發'PropertyChanged'事件。發佈「MyItem」類的源代碼。 –

回答

0

您沒有提供足夠的信息,但根據您提供的代碼,它看起來像設置爲item.ItemColor時,ItemColor的PropertyChanged事件未被觸發。

MyItem應執行INotifyPropertyChanged並致電PropertyChanged(this, new PropertyChangedEventArgs("ItemColor"))

相關問題