BusyIndicator.Message Привязка к коллекции строк - PullRequest
0 голосов
/ 08 января 2010

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

Сначала индикатор не отображает мои сообщения, я вижу только пустое поле индикатора с неопределенным индикатором выполнения:

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

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

Спасибо
Mark

1 Ответ

0 голосов
/ 11 апреля 2012

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

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

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

...