Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для Ferrym
0 / 0 / 4
Регистрация: 18.01.2012
Сообщений: 49
WPF

Binding in ComboBox

15.03.2020, 19:50. Показов 2008. Ответов 7
Метки wpf (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Подскажите, каким образом забиндить данные, чтобы в комбобокс отображались одни данные, а при отметке выводились другие?
Имеем класс Пост и класс Альбом:
C#
1
2
3
4
5
6
7
8
9
10
11
public class AlbumDTO
    {
        public string Title {get;set;}
        public int Id {get;set;}
        
        public AlbumDTO(string title, int id)
        {
            Title = title; //Наименование альбома
            Id = id; //Ид Альбома
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Post
    {
        public string Title {get;set;}
        public string Id {get;set;}
        public string Text { get;set;}
        public string Image { get; set;}
        public AlbumDTO Alb { get; set;}//Альбомы
        
        public Post(string title,string id,string text, string image, AlbumDTO alb)
        {
            Title = title;
            Id = id;
            Text = text;
            Image = image;
            Alb = Alb; // Альбомы
        }
        
    }
Создаем посты:
C#
1
2
3
4
5
6
7
8
public static ObservableCollection<Post> ListPost { get; set; }
        
        public static void Load()
        {
            ListPost = new ObservableCollection<Post>();
            ListPost.Add(new Post("Заголовок 1","1","Текст1","Assets/1.png", new AlbumDTO("Альбом 1", 1)));
            ListPost.Add(new Post("Заголовок 2","2","Текст2","Assets/1.png", new AlbumDTO("Альбом 2", 2)));
        }
Создаем вью:
XML
1
2
3
4
5
                   x:Name="itemsControl" ItemsSource="{Binding ListPost}">
                      
                            
                                        <ComboBox Margin="0 10" ItemsSource="{Binding Alb}">
                                        </ComboBox>
Как отметить, чтобы отображалось наименование альбома, а при выборе учитывался его Ид? Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2020, 19:50
Ответы с готовыми решениями:

Исключение из ComboBox'а значений выбранных в других ComboBox'ов используя Binding
Возможно ли средствами Binding-a решить такую задачку: есть 5 TextBox - ов, и 3 ComboBox - а. значения всех TextBox - ов заносятся в...

Combobox to Combobox binding according to Foreign Key
Всем привет! :) Во-первых хочу сказать всем, что это самый лучший (судя по собственному опыту) форум для проггеров. Так как прошлую...

Binding к Combobox
Всем привет. Сижу не понимаю как привязывать к Combobox-у. У меня есть таблица(Entity Framework) с языками, в которую я могу добавлять...

7
 Аватар для Ferrym
0 / 0 / 4
Регистрация: 18.01.2012
Сообщений: 49
16.03.2020, 22:08  [ТС]
Подскажите, или тык-ните где почитать, как вытащить Id1?
XML
1
2
3
4
5
6
<ComboBox Margin="0 10" ItemsSource="{Binding Alb}" DisplayMemberPath="Title1" SelectedValuePath="Id1" >
                                        </ComboBox> 
 
                                        <Button Content="Кнопка" Margin="5 5" Width="60" Height="30" Background="LightGray"
                                    CommandParameter="{Binding}" 
                                    Command="{Binding DataContext.ComClik, ElementName=itemsControl}"/>
C#
1
2
3
4
5
private RelayCommand _comClik;
public RelayCommand ComClik
        {
            get {return _comClik ?? (_comClik = new RelayCommand(p => OnClik((Post)p), p => p is Post));}
        }
C#
1
public virtual void OnClik(Post post) {}
Post.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Post
    {
        public string Title {get;set;}
        public string Id {get;set;}
        public string Text { get;set;}
        public string Image { get; set;}
        public List<AlbumDTO> Alb { get; set;}
        
        public Post(string title,string id,string text, string image, List<AlbumDTO> alb)
        {
            Title = title;
            Id = id;
            Text = text;
            Image = image;
            Alb = alb;
        }
        
    }
AlbumDTO.cs
C#
1
2
3
4
5
6
7
8
9
10
11
public class AlbumDTO
    {
        public string Title1 {get;set;}
        public int Id1 {get;set;}
        
        public AlbumDTO(string title, int id)
        {
            Title1 = title;
            Id1 = id;
        }
    }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,087
Записей в блоге: 2
16.03.2020, 22:51
Цитата Сообщение от Ferrym Посмотреть сообщение
Подскажите, или тык-ните где почитать, как вытащить Id1?
Вы очень непонятно изъяснились.
Если вам нужно какое-то свойство выделенного элемента в View, то в Свойстве SelectedValuePath указываете путь к нужному свойству выделенного элемента.
А значение свойства забираете из Свойства SelectedValue.

Если вам нужно тоже самое получить в ViewModel, то получаете как обычно из привязанного свойства указывая на вложенной свойство.

Для белее детально ответа, нужно больше вашего кода и более понятных объяснений чего вам нужно.
0
 Аватар для Ferrym
0 / 0 / 4
Регистрация: 18.01.2012
Сообщений: 49
16.03.2020, 23:27  [ТС]
Передаю объект Пост (Post), в нем текст, фото, ид, список (AlbumDTO) Альбомов: Ид - альбома и наименование.
хочу чтобы при нажатии кнопки передавался выбранный ид альбома из комбобокса...
Post.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Post
    {
        public string Title {get;set;}
        public string Id {get;set;}
        public string Text { get;set;}
        public string Image { get; set;}
        public List<AlbumDTO> Alb { get; set;}
        
        public Post(string title,string id,string text, string image, List<AlbumDTO> alb)
        {
            Title = title;
            Id = id;
            Text = text;
            Image = image;
            Alb = alb;
        }
        
    }
Album DTO
C#
1
2
3
4
5
6
7
8
9
10
11
public class AlbumDTO
    {
        public string Title1 {get;set;}
        public int Id1 {get;set;}
        
        public AlbumDTO(string title, int id)
        {
            Title1 = title;
            Id1 = id;
        }
    }
View:
XML
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
 <ItemsControl x:Name="itemsControl" ItemsSource="{Binding ListPost}">
                       
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Border Margin="10" Width="110" Height="260">
                                    <StackPanel>
                                        <Border Width="100" Height="100" CornerRadius="5" Margin="5">
                                            <Border.Effect>
                                                <DropShadowEffect ShadowDepth="1"/>
                                            </Border.Effect>
                                            <Border.Background>
                                                <ImageBrush ImageSource="{Binding Image}"/>
                                            </Border.Background>
                                        </Border>
                                        <TextBlock Margin="5" Text="{Binding Title}" FontSize="12"/>
                                        <TextBox Margin="5 0" Text="{Binding Text}" FontSize="12"/>
                                        <ComboBox Margin="0 10" ItemsSource="{Binding Alb}" DisplayMemberPath="Title1" SelectedValuePath="Id1" >
                                        </ComboBox> 
 
                                        <Button Content="Кнопка" Margin="5 5" Width="60" Height="30" Background="LightGray"
                                    CommandParameter="{Binding}" 
                                    Command="{Binding DataContext.ComClik, ElementName=itemsControl}"/>
                                            
                                        
                                        
                                    </StackPanel>
                                </Border>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
ViewModel^
C#
1
2
3
4
5
6
private RelayCommand _comClik;
 
        public RelayCommand ComClik
        {
            get {return _comClik ?? (_comClik = new RelayCommand(p => OnClik((Post)p), p => p is Post));}
        }
Model^
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Start
    {
        public static ObservableCollection<Post> ListPost { get; set; }
        
        public static void Load()
        { 
            List<AlbumDTO> ListData = new List<AlbumDTO>();
            ListData.Add(new AlbumDTO("Albom1",1));
            ListData.Add(new AlbumDTO("Albom2",2));
        
            ListPost = new ObservableCollection<Post>();
            ListPost.Add(new Post("Заголовок 1","1","Текст1","Assets/1.png", ListData));
            ListPost.Add(new Post("Заголовок 2","2","Текст2","Assets/1.png", ListData));
            ListPost.Add(new Post("Заголовок 3","3","Текст3","Assets/1.png", ListData));
            
        }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,087
Записей в блоге: 2
16.03.2020, 23:55
Цитата Сообщение от Ferrym Посмотреть сообщение
Передаю объект Пост (Post), в нем текст, фото, ид, список (AlbumDTO) Альбомов: Ид - альбома и наименование.
хочу чтобы при нажатии кнопки передавался выбранный ид альбома из комбобокса...
Судя по коду у вас всё правильно.
В методе OnClik вы получаете элемент на котором была нажата кнопка.
Что не так?
Исполнение не заходит в этот метод?
0
 Аватар для Ferrym
0 / 0 / 4
Регистрация: 18.01.2012
Сообщений: 49
17.03.2020, 00:30  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Что не так?
Исполнение не заходит в этот метод?
не знаю каким способом отловить SelectedValuePath="Id1"
вытащить получается только сам список Альбомов... List<AlbomDTO>

Добавлено через 56 секунд
Может в Post.cs добавить свойство выбранный альбом(ид) и передавать туда и вытаскивать оттуда уже
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,087
Записей в блоге: 2
17.03.2020, 00:39
Лучший ответ Сообщение было отмечено Ferrym как решение

Решение

Цитата Сообщение от Ferrym Посмотреть сообщение
не знаю каким способом отловить SelectedValuePath="Id1"
C#
1
2
3
4
5
6
7
8
public class Post
    {
        public string Title {get;set;}
        public string Id {get;set;}
        public string Text { get;set;}
        public string Image { get; set;}
        public List<AlbumDTO> Alb { get; set;}
        public AlbumDTO  AlbumSelected{ get; set;}
XML
17
18
            <ComboBox Margin="0 10" ItemsSource="{Binding Alb}" DisplayMemberPath="Title1"
                   SelectedItem="{Binding AlbumSelected}" />
И в методе OnClik проверяйте свойтство AlbumSelected
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,087
Записей в блоге: 2
17.03.2020, 20:33
Цитата Сообщение от Ferrym Посмотреть сообщение
не знаю каким способом отловить SelectedValuePath="Id1"
Ещё вариант без свойства public AlbumDTO AlbumSelected{ get; set;}
C#
1
2
3
4
5
6
       private RelayCommand _comClik;
 
        public RelayCommand ComClik
        {
            get {return _comClik ?? (_comClik = new RelayCommand(p => OnClik((AlbumDTO)p), p => p is AlbumDTO));}
        }

XML
17
18
19
20
21
22
         <ComboBox x:Name="comboBox" Margin="0 10"
                ItemsSource="{Binding Alb}" DisplayMemberPath="Title1" .> 
 
         <Button Content="Кнопка" Margin="5 5" Width="60" Height="30" Background="LightGray"
                CommandParameter="{Binding SelectedItem, ElementName=comboBox}" 
                Command="{Binding DataContext.ComClik, ElementName=itemsControl}"/>
Так вы сразу в команде получаете выбранный альбом, но надо изменить тип параметра в методе
C#
1
2
3
4
void OnClik(AlbumDTO parameter)
{
      ///////
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2020, 20:33
Помогаю со студенческими работами здесь

Binding ComboBox
Как сделать с помощью биндинга установку элемента комбобокса по умолчанию? Есть идея такая создать свой комбобокс и сделать в нем 2...

Binding combobox в БД
Подскажите, как можно про binding строчку из combobox в БД??? Делаю, так но ругается: &lt;ComboBox Grid.Column=&quot;1&quot;...

Binding ComboBox.Text
Доброго дня! Имеется окно, DataGrid, ComboBox и две модели данных. У DataGrid свойство ItemsSource =...

ComboBox.SelectedIndex Binding to value-1
Добрый день! Возникла необходимость привязки данных, но чтобы от привязанного значения вычиталась единица. Сейчас привязка выглядит...

Множество ComboBox Binding
Мне очень интересно как правильно с помощью WPF + MVVM сделать следующие. Имеем Model Auto. public class AutoModel: Protected { ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru