powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Обновить содержимое ListBox.ItemsSource
6 сообщений из 6, страница 1 из 1
Обновить содержимое ListBox.ItemsSource
    #38860746
Добрый день,
прочитал статью
внизу статьи есть исходники.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
// Emulates a long items getting process using some delay of getting of each item
public static class AsyncDataProvider
{    
    private const int _DefaultDelayTime = 300;
 
    public static ReadOnlyCollection<string> GetItems()
    {
        return GetItems(_DefaultDelayTime);
    }
 
    public static ReadOnlyCollection<string> GetItems(int delayTime)
    {            
        List<string> items = new List<string>();            
        foreach (string item in Enum.GetNames(typeof(AttributeTargets)).OrderBy(item => item.ToLower()))
        {
            items.Add(item);
            // Syntetic delay to emulate a long items getting process
            Thread.Sleep(delayTime);
        }
 
        return items.AsReadOnly();
    }        
}


Код: xml
1.
2.
3.
4.
5.
6.
7.
<Window.Resources>
    <ObjectDataProvider x:Key="AsyncDataSource" 
        IsAsynchronous="True"
        ObjectType="Providers:AsyncDataProvider" 
        MethodName="GetItems" />
    <Converters:NullToBooleanConverter x:Key="NullToBooleanConverter" />
</Window.Resources>


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<ListBox x:Name="ItemsListBox" 
            ItemsSource="{Binding Source={StaticResource AsyncDataSource}, IsAsync=True}">        
    <ListBox.Style>
        <Style TargetType="{x:Type ListBox}">
            <Style.Triggers>
                <Trigger Property="ItemsSource" Value="{x:Null}">
                    <Setter Property="Template" Value="{StaticResource WaitControlTemplate}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.Style>
</ListBox>



Подскажите пожалуйста как из кода c# вызвать обновление коллекции GetItems().
буду признателен если покажете как это сделать в обоих случаях, рассмотренных в статье.
...
Рейтинг: 0 / 0
Обновить содержимое ListBox.ItemsSource
    #38860840
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а) использовать Task'и и async, await
б) для связывания со списками использовать ICollectionView, у него есть метод Refresh
сам вашим способом ни разу не пользовался как и DataProvider'ами, по этому сказать ни чего не могу. Кому он вообще нужен?
...
Рейтинг: 0 / 0
Обновить содержимое ListBox.ItemsSource
    #38861156
нашел сам, может не самый изящный метод, но работает
у датаПровайдера сменить ObjectType на null, а потом обратно на исходный тип.
Привязка получает информацию о том, что источник поменялся и вызывается перечитывание данных, так же в отдельном потоке на уровне платформы.

Спасибо.
...
Рейтинг: 0 / 0
Обновить содержимое ListBox.ItemsSource
    #38861193
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Калуцкий,

дело конечно ваше, но нафига вот так извращаться ? может я не понимаю сакрального смысла
...
Рейтинг: 0 / 0
Обновить содержимое ListBox.ItemsSource
    #38861374
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Калуцкийнашел сам, может не самый изящный метод, но работает
у датаПровайдера сменить ObjectType на null, а потом обратно на исходный тип.
Привязка получает информацию о том, что источник поменялся и вызывается перечитывание данных, так же в отдельном потоке на уровне платформы.

Спасибо.
По вашей же ссылке ниже дано описание, как делается аснихронный биндинг с использованием вьюмодели - чем вам этот способ не понравился? Он намного гибче и универсальнее.
...
Рейтинг: 0 / 0
Обновить содержимое ListBox.ItemsSource
    #38903736
Сон Веры Павловны,

конечно же сделал по VM.
вопрос был: как вызвать обновление данных?
по схеме VM с асинхронным биндингом оказалось еще проще, чем с ДатаПровайдером:
надо свойству (к которому прибиндин список) присвоить значение null.
в примере, при получении значения этого свойства идет проверка на null, типа - если null, то запрос и вывод.

Спасибо :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Обновить содержимое ListBox.ItemsSource
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]