2010-11-30 8 views
0

Apparemment, je ne comprends pas quelque chose à propos de la liaison ListBox contrôles aux données.Silverlight: Difficile avec la liaison de données

Voici un ListBox qui se lie à une propriété dans le code-behind:

 <ListBox ItemsSource="FavoriteFilters" 
       x:Name="favoriteFiltersList" 
       Visibility="{Binding FavoriteFilters.IsEmpty, Converter={StaticResource visibilityConverter}}"> 

      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <my:FavoriteFilterLink /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Quand je fais cela, le ListBox apparaît avec un seul élément peuplé de valeurs de repli, même si la source des éléments est vide . Cela arrive peu importe ce que j'ai mis ItemsSource à, comme ItemsSource="TotallyInvalidProperty". Toutefois, si ItemsSource est vide, la ListBox disparaît.

Le code derrière:

public ObservableCollection<FavoriteFilter> FavoriteFilters 
    { 
     get 
     { 
      return PlumData.FavoriteFilters; 
     } 
    } 

PlumData:

private static ObservableCollection<FavoriteFilter> _favoriteFilters = new ObservableCollection<FavoriteFilter>(); 
    public static ObservableCollection<FavoriteFilter> FavoriteFilters 
    { 
     get 
     { 
      return _favoriteFilters; 
     } 
    } 

Je ne comprends pas pourquoi cela ne fonctionne pas. Cependant, quand je le fais dans le code-behind, ça marche bien:

void BottomFavoritesBar_Loaded(object sender, RoutedEventArgs e) 
    { 
     favoriteFiltersList.ItemsSource = FavoriteFilters; 
    } 

Qu'est-ce que je fais mal? J'utilise SL4.

Répondre

1

du haut de ma tête, ne vous devez définir la liaison comme ceci:

<ListBox ItemsSource="{Binding FavoriteFilters}" 
      x:Name="favoriteFiltersList" 
      Visibility="{Binding FavoriteFilters.IsEmpty, Converter={StaticResource visibilityConverter}}"> 

Notez le mot-clé Binding.