powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
10 сообщений из 10, страница 1 из 1
Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
    #37474328
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой: есть класс со свойством типа обобщенный словарь (Dictionary)
Код: plaintext
1.
2.
3.
4.
public class mClass
{
     public Dictionary<string, bool> MyDic;
}
Надо в ListBox`е отобразить значения этого свойства. Шаблон для Listbox с Checkbox`ами я создам, а вот привязки как сделать не понимаю. ListBox вообще умеет ли работать со словарями или придется словарь преобразовывать в другую структуру ? Очень не хотелось бы.
Спасибо за советы.
...
Рейтинг: 0 / 0
Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
    #37474375
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для ListBox'a нужен IList, если необходим Dictionary, то
Код: plaintext
1.
2.
3.
4.
5.
6.
public class mClass
{
     public Dictionary<string, bool> MyDic { get { return MyList.ToDictionary(bla, bla) }};
    
}


PS В wpf можно задать группировку в ListBox
...
Рейтинг: 0 / 0
Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
    #37474628
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVa,

Как-то мудрёно. Зачем возвращать значение типа Dictionary если исходное своство того же типа ? Может имесь ввиду возврат тзначения типа List<T> ?

авторPS В wpf можно задать группировку в ListBox

А вот тут по-подробнее можно?
...
Рейтинг: 0 / 0
Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
    #37474647
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем задавать вопросы, если не читать ответы?
MyList .ToDictionary не справочник, а список, с которым может работать ListBox.
По второму вопросу - гугл в руки, для изучения матчасти.
...
Рейтинг: 0 / 0
Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
    #37474710
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVaЗачем задавать вопросы, если не читать ответы?
MyList .ToDictionary не справочник, а список, с которым может работать ListBox.

http://msdn.microsoft.com/ru-ru/library/bb549277.aspx
Где тут возврат списка ? Потому вопросы и задаю.
...
Рейтинг: 0 / 0
Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
    #37474766
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
public class mClass
{
     public ObservableCollection<MyObject> MyList { get; set; }
     public Dictionary<string, bool> MyDic { get { return MyList.ToDictionary(bla, bla) }};
}

...
Рейтинг: 0 / 0
Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
    #37474769
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или я не понял вопрошающего, или - отвечающего, но что вам всем мешает сделать просто и ясно?
Типа так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
// MainPage.xaml.cs
using System.Collections.Generic;
using System.Windows.Controls;

namespace BindingListBoxToDictionary
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            this.DataContext = new Dictionary<string, bool> 
            {
                {"first", true},
                {"second", false},
                {"third", true},
                {"fourth", false},
            };
        }
    }
}
Код: plaintext
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.
<!-- MainPage.xaml -->
<UserControl x:Class="BindingListBoxToDictionary.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    <UserControl.Resources>
        <DataTemplate x:Key="DefaultDictionaryTemplate">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Key}" />
                <TextBlock Text="{Binding Value}" />
            </StackPanel>
        </DataTemplate>
    </UserControl.Resources>
    <StackPanel Orientation="Vertical" x:Name="LayoutRoot" Background="White">
        <ListBox ItemsSource="{Binding}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding Value}" Content="{Binding Key}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <ListBox ItemsSource="{Binding}" ItemTemplate="{StaticResource DefaultDictionaryTemplate}"/>
    </StackPanel>
</UserControl>
...
Рейтинг: 0 / 0
Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
    #37474813
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qu-qu,

Да это и надо было. Просто я незнал работает ли ListBox со словарями и как это делать. Повторил Ваш пример, получаю ошибку:
Привязка типа TwoWay или OneWayToSource не может работать с доступным только для чтения свойством "Value" типа "System.Collections.Generic.KeyValuePair`2[System.String,System.Boolean]".

Почему свойство Value стало только для чтения ? Если поставить Mode="OneWay" то ошибки нет, но и в словаре изменений нет. Пока решил устанавливать значения в словаре по событиям Checked и Unchecked CheckBox`а в шаблоне. Но это корявенько как мне кажется.
И что означает пустая привязка у ItemesSource ?
...
Рейтинг: 0 / 0
Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
    #37474837
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thunder2,

Тут будет работать только OneWay, т.к. к листу привязывается коллекция KeyValuePair-ов, у которых свойство Value - действительно ReadOnly.
(поищите в тыр-нетах по словам: " listbox itemssource binding to dictionary " там полно обходных путей для получения редактируемых словарей).

Пустая привязка у ItemesSource означает, что источник записей привязывается к самому DataContext-у, а не к его свойству.
(это от лени и для ускорения написания примера, как и использование словаря в качестве DataContext-а у всей формы).
...
Рейтинг: 0 / 0
Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
    #37474838
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qu-quthunder2,

Тут будет работать только OneWay, т.к. к листу привязывается коллекция KeyValuePair-ов, у которых свойство Value - действительно ReadOnly.

В MSDN посмотрел , действительно свойства только для чтения. Эх, жаль раньше не глянул.

(поищите в тыр-нетах по словам: " listbox itemssource binding to dictionary " там полно обходных путей для получения редактируемых словарей).

Пустая привязка у ItemesSource означает, что источник записей привязывается к самому DataContext-у, а не к его свойству.
(это от лени и для ускорения написания примера, как и использование словаря в качестве DataContext-а у всей формы).

Спасибо большое за наставление на путь истинный.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Dictionary<TKey, TValue> отобразить в ListBox с CheckBox`ами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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