2010-01-08 8 views
0

J'essaye de lier un SL BusyIndicator à une collection de messages occupés. Lorsque la collection contient des éléments, l'indicateur affiche les messages. Lorsque la collection de messages est vide, l'indicateur se cache.BusyIndicator.Message Liaison à la collection de chaînes

Tout d'abord l'indicateur n'affiche pas mes messages, tout ce que je vois est un boîtier indicateur en blanc, avec une barre de progression indéterminée:

<UserControl.Resources> 

... 
<anotherAssembly:CollectionToBoolConverter x:Key="CollectionToBoolConverter" /> 

<DataTemplate x:Key="LoadingMessageDataTemplate"> 
    <ItemsControl x:Name="itemsControl" ItemsSource="{Binding AllocationLoadingMessages}" > 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding}" /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</DataTemplate> 

... 

</UserControl.Resources> 

... 

<controlToolkit:BusyIndicator 
    IsBusy="{Binding AllocationLoadingMessages, Converter={StaticResource CollectionToBoolConverter}}" 
    BusyContent="{Binding AllocationLoadingMessages}" 
    BusyContentTemplate="{StaticResource LoadingMessageDataTemplate}"/> 
///content 
</controlToolkit:BusyIndicator> 

... 

ViewModel:

private ObservableCollection<string> _allocationLoadingMessages = new ObservableCollection<string>(); 
    public ObservableCollection<string> AllocationLoadingMessages 
    { 
     get { return _allocationLoadingMessages; } 
     set 
     { 
      SetValue(ref _allocationLoadingMessages, value, "AllocationLoadingMessages"); 
     } 
    } 

Alors, comment puis-je obtenir une simple liste de messages dans mon Indiciator?

Merci,
Mark

+1

Visual Studio se plaint qu'il existe des erreurs de liaison à l'exécution dans la fenêtre de sortie? – vidalsasoon

+0

Il n'y a pas d'erreur de liaison dans la fenêtre de sortie. Bonne suggestion et merci pour votre réponse rapide de toute façon. Frappant toujours ma tête sur celui-ci! –

Répondre

0

Votre code est très près de la cible, tout ce que vous devez faire pour obtenir ce travail est de remplacer la ligne

<ItemsControl x:Name="itemsControl" ItemsSource="{Binding AllocationLoadingMessages}" > 

avec

<ItemsControl x:Name="itemsControl" ItemsSource="{Binding}" > 

J'ai testé cela à la fois dans Silverlight 3 et 5, donc je pense que ça marchera aussi bien en 4.

Je ne sais pas à quoi sert votre code set { } pour la propriété AllocationLoadingMessages; vous ne devriez pas avoir à remplacer la collection chaque fois que vous y apportez une modification. Quand je suis arrivé à travailler, tout ce que je l'ai fait dans le modèle de vue était le suivant:

public ObservableCollection<string> AllocationLoadingMessages { get; set; } 

    private int _loadingMessageNumber = 0; 
    private void Add() 
    { 
     AllocationLoadingMessages.Add("Loading message #" + ++_loadingMessageNumber); 
     PropertyChanged(this, new PropertyChangedEventArgs("AllocationLoadingMessages")); 
    } 

    private void RemoveFirst() 
    { 
     if(AllocationLoadingMessages.Count > 0) 
     { 
      AllocationLoadingMessages.RemoveAt(0); 
      PropertyChanged(this, new PropertyChangedEventArgs("AllocationLoadingMessages")); 
     } 
    } 

Je suis désolé, je suis en retard (n'a pas rencontré cette question jusqu'à maintenant), mais je l'espère peut à moins aider les autres qui cherchent la réponse à cela.

Questions connexes