Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Cuguyc
43 / 43 / 16
Регистрация: 02.06.2016
Сообщений: 95
1

Binding потокобезопасных коллекций

12.01.2017, 15:57. Просмотров 231. Ответов 1
Метки нет (Все метки)

Возможно ли в wpf сделать привязку к потокобезопасной коллекции с отображением на экране изменений (например добавлений элементов) из разных потоков?

К примеру попытался прибиндить ConcurrentBag к DataGrid как обычно биндил ObservableCollection, но обновления из разных потоков не отображает.

XML
1
2
3
4
5
6
<DataGrid ItemsSource="{Binding collection, UpdateSourceTrigger=PropertyChanged}" >
     <DataGrid.Columns>
           <DataGridTextColumn MinWidth="50"   Header="Num"          Binding="{Binding Path=i}" />
           <DataGridTextColumn MinWidth="50"   Header="Text"          Binding="{Binding Path=k}" />
     </DataGrid.Columns>
</DataGrid>

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public MainWindowViewModel()
        {            
            thrColl = new ConcurrentBag<Item>();
 
            Item it = new Item();
 
            it.i = 1;
            it.k = "a";
 
            collection.Add(it);
            thrColl.Add(it);
 
            Item it2 = new Item();
 
            it2.i = 2;
            it2.k = "b";
            
            collection.Add(it2);
            thrColl.Add(it2);
 
            Thread thr1 = new Thread(Work);
            thr1.Start();
            
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
 
        private void OnPropertyChanged(string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
 
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
 
        private ConcurrentBag<Item> _thrColl;
        public ConcurrentBag<Item> thrColl { get { return _thrColl; } set { _thrColl = value; OnPropertyChanged("thrColl"); } }
 
        public void Work()
        {
 
            for (int i = 3; i < 5; i++)
            {
                System.Threading.Thread.Sleep(1000);
                Item it = new Item();
                it.i = i;
                it.k = "aaa";
                thrColl.Add(it);                
            }
        }
P.S. Только пробую разобраться с много поточностью, прошу сильно не бить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2017, 15:57
Ответы с готовыми решениями:

Передать внутри Binding в ConverterParameter ссылку на окно содержащее объект, который использует Binding
В главном окне в ресурсах есть Контекстные меню. У программы есть &quot;Ручной...

Свойства коллекций
Господа, ПОМОГИТЕ плз ! Всю голову сломал. Почему игнорируется сеттер ? ...

Сравнение коллекций
есть кулинарная книга. в которой нужно сделать поиск по рецептам(пользователь...

Быстрое сравнение коллекций
Есть 2 коллекции List&lt;SomeItem&gt;. Одна исходная, с другой работаю. Каким...

Как создать коллекцию коллекций
Надо создать коллекцию коллекций... Например создаём элемент коллекции, а в...

1
nicolas2008
250 / 235 / 85
Регистрация: 30.04.2009
Сообщений: 697
Завершенные тесты: 1
14.01.2017, 02:20 2
Во первых, ConcurrentBag не поддерживает интерфейс INotifyCollectionChanged, необходимый гриду для понимания когда коллекция изменилась.
Во вторых, взаимодействие с UI можно делать только из UI потока - после подготовки данных в фоновом потоке, нужно через Dispatcher или SynchronizationContext главного потока послать задачу добавления элемента в коллекцию.
Т.е. использовать ConcurrentBag для UI биндинга - плохая идея.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2017, 02:20

Сериализация разнотипных коллекций с помощью BinaryFormatter
Привет всем! Подскажите пожалуйста как сериализовать две раснотипные коллекции...

Как устроен внутренний механизм коллекций?
Вопрос такой как устроен внутренний механизм коллекций, вот возьмем пример...

Binding x:Name
Доброго времени суток. Подскажите пожалуйста как в Style получить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru