@Kryshtop

Как привязать коллекцию к ComboBox?

Здравствуйте, есть класс "Владелец" в WPF приложении
public class Owner : INotifyPropertyChanged
    {
        private string _name; // имя владельца

        public event PropertyChangedEventHandler PropertyChanged;

        public Owner(string name)
        {
            _name = name;
        }

        public Owner()
        {
            _name = "Анон";
        }

        public string Name
        {
            get => _name;
            set
            {
                _name = value;
                OnPropertyChanged();
            }
        } // Name

        public void OnPropertyChanged([CallerMemberName]string prop = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
        }

        public override string ToString()
        {
            return $"{_name}";
        }
    }

59fda5888c749314618499.png
Во ViewModel классе MVVM паттерна я создаю ObservableCollection владельцев и передаю её в xaml разметку в представление
<ListBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding Owners}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="5">
                        <TextBlock FontSize="18" Text="{Binding Path=Name}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Список ListBox успешно отображается, нет никаких проблем.
Но мне нужен выпадающий список:
<ComboBox Margin="5 5 5 0" 
                      ItemsSource="{Binding Owners}"
                      DisplayMemberPath="Name"
                      Text = "{Binding Owner, UpdateSourceTrigger = PropertyChanged}" />

59fda596e730f745074163.png
...содержимое которого после компиляции просто отсутствует.
P.S. Коллекция Owners инициализирована и заполнена данными.
  • Вопрос задан
  • 925 просмотров
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman
C# the best
<ComboBox Margin="5 5 5 0" 
                      ItemsSource="{Binding Owners}"
                      DisplayMemberPath="Name"
                      Text = "{Binding Owner, UpdateSourceTrigger = PropertyChanged}" />


Text = "{Binding Owner, UpdateSourceTrigger = PropertyChanged}" Этого не надо. Допишите SelectedValuePath и SelectedValue, в вашем случае это будет "Name"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы