J'ai mis le ItemsSource
d'un ListBox
à une collection ObservableCollection<Employee>
, et ma Employee
classe implémente INotifyPropertyChanged
.ObservableCollection <T> ne met pas à jour ListBox
Sur le Employee
, j'ai lié plusieurs propriétés, l'une d'entre elles une propriété Color
, et je me suis assuré qu'il appelle l'événement PropertyChanged
lorsqu'il est modifié. J'ai également vérifié avec le débogueur que l'invocation PropertyChanged
est appelée.
Toutefois, lorsque l'DataBound Background
du ListBoxItem
dans la limite ListBox
ne jamais mettre à jour, ce qui est extrêmement fustrating.
En réglant le ItemsSource
sur null, et en le réinitialisant après que fonctionne, mais ce n'est pas comment nous sommes censés utiliser le modèle Observateur.
Le XAML utilisé:
<Style TargetType="{x:Type ListBoxItem}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}"
Color="{x:Static SystemColors.HighlightColor}" />
</Style.Resources>
<Setter Property="Foreground" Value="White" />
<Setter Property="Background"
Value="{Binding Path=Color, Converter={StaticResource ColorConverter}}" />
<Setter Property="Content" Value="{Binding Path=Name}" />
<Setter Property="Height" Value="25" />
<Setter Property="Margin" Value="0,1,0,1" />
<EventSetter Event="MouseDoubleClick" Handler="HelperList_MouseDoubleClick" />
</Style>
<ListBox x:Name="helperList" Grid.Column="0" Grid.Row="1"
Margin="5,2,0,5" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
ScrollViewer.VerticalScrollBarVisibility="Visible"
SelectionChanged="HelperList_SelectionChanged">
</ListBox>
Plus code en réponse à la première réponse:
public class Employee : Person
{
private EmployeeColor color = new EmployeeColor();
public EmployeeColor Color
{
get { return this.color; }
set
{
if(!this.color.Equals(value))
OnPropertyChanged("Color");
this.color = value;
}
}
}
var employees = new ObservableCollection<Employee>();
//... fill out data here
helperList.ItemsSource = employees;
Rien de mal ici, pouvez-vous fournir plus de code? Classe d'employeur et comment définissez-vous ItemSource? –
terminé, vérifiez le code mis à jour. Même cela devrait être assez évident, comme je l'ai dit, je viens de définir la propriété ItemSource à un ObserverableCollection! –
Que contient votre ColorConverter? Est-ce qu'il convertit une couleur en pinceau comme prévu par la propriété Background? Je soupçonne que le problème est là. – Mart