2010-01-08 2 views
0

Я пытаюсь привязать SL BusyIndicator к набору загруженных сообщений. Когда в коллекции есть элементы, индикатор отобразит сообщения. Когда сбор сообщений пуст, индикатор скроется.BusyIndicator.Message Связывание с коллекцией строк

Во-первых индикатор не отображает мои сообщения, я вижу это поле пустым индикатором, с неопределенным прогресс бар:

<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"); 
     } 
    } 

Так как же я получаю простой список сообщений в моем индикаторе?

Спасибо,
Все

+1

является Visual Studio, жалующийся на наличие ошибок привязки во время выполнения в окне вывода? – vidalsasoon

+0

В окне вывода нет ошибок привязки. Хорошее предложение и спасибо за ваш быстрый ответ в любом случае. Все еще треплю голову над этим! –

ответ

0

Ваш код находится очень близко к цели, все, что вам нужно сделать, чтобы получить эту работу, чтобы заменить строку

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

с

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

Я тестировал это как в Silverlight 3, так и в 5, так что я думаю, что он будет работать и в 4.

Я не уверен, что ваш set { } код для AllocationLoadingMessages Недвижимость для; вам не придется заменять коллекцию каждый раз, когда вы вносите изменения в нее. Когда я получил его на работу, все, что я сделал в модели представления была такова:

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")); 
     } 
    } 

Я сожалею, что я поздно (не пришел по этому вопросу до сих пор), но я надеюсь, что он может в наименее помогите другим, которые ищут ответ на этот вопрос.

Смежные вопросы