1

Не могу понять, где у меня ошибка с привязкой элементов к ComboBox.

Вот такая XAML разметка элемента:

<ComboBox x:Name="projectBox"  Width="120" RenderTransformOrigin="1.681,1.246" Margin="210,84,476,378" ItemsSource="{Binding Projects}" DisplayMemberPath="ProjectName"/>

В классе:

MainWindow объявлено свойство

 public ObservableCollection<ProjectInfo> Projects { get; set; }

По нажатию на кнопку вызывается метод, который что-то делает и присваивает этому свойству реальную коллекцию элементов.

В дебаггере я перепроверил и там есть элементы, но по факту в ComboBox ниего не отображается.

Где я ошибся?

UPD

Переделал все вот в такой вид:

XAML:

<ComboBox x:Name="projectBox"  Margin="210,84,408,378"  ItemsSource="{Binding Projects}" DisplayMemberPath="ProjectName"/>



public MainWindow()
    {
        InitializeComponent();
        ProjectView pv = new ProjectView();
        DataContext = pv;
    }

Вьюха:

   public class ProjectView : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        ObservableCollection<ProjectInfo> _projects;
        public ObservableCollection<ProjectInfo> Projects
        {
            get => _projects;
            set
            {
                _projects = value;
                OnPropertyChanged("Projects");
            }
        }

        public ProjectView()
        {
            Projects = new ObservableCollection<ProjectInfo>
            {
                new ProjectInfo() {ProjectId = 1, ProjectName = "123"},
                new ProjectInfo() {ProjectId = 2, ProjectName = "123"}
            };
        }
        protected virtual void OnPropertyChanged(string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Есть 2 элемента в ComboBox, но названия элементов не видно.

iluxa1810
  • 24,899
  • public ObservableCollection<ProjectInfo> Projects - это не свойство, это поле. У свойства есть геттеры/сеттеры – tym32167 Apr 22 '18 at 10:35
  • @tym32167, подправил – iluxa1810 Apr 22 '18 at 10:36
  • Биндинг работает со свойствами, не с полями. С полями биндинг не работает. – tym32167 Apr 22 '18 at 10:38
  • Поменял на свойство, но все равно не работает=( – iluxa1810 Apr 22 '18 at 10:39
  • При присвоении этому свойству коллекции элементов вы вызываете NotifyPropertyChanged? – tym32167 Apr 22 '18 at 10:41
  • А вы не забыли установить DataContext? – VladD Apr 22 '18 at 10:42
  • @tym32167, нет. – iluxa1810 Apr 22 '18 at 10:47
  • так вызовите, иначе как вы оповестите UI о том, что модель изменилась – tym32167 Apr 22 '18 at 10:53
  • @tym32167, обновил вопрос. – iluxa1810 Apr 22 '18 at 11:17
  • можно увидеть класс ProjectInfo? – tym32167 Apr 22 '18 at 11:22
  • А может в ProjectInfo поля вместо свойств? Или нету public? – VladD Apr 22 '18 at 11:23
  • @VladD, да... Подправил и все заработало. Спасибо. – iluxa1810 Apr 22 '18 at 11:23
  • Пожалуйста! Коллективно разобрали проблему – VladD Apr 22 '18 at 11:24
  • @VladD, вопрос, наверное, мне в мусорку отправить? – iluxa1810 Apr 22 '18 at 11:32
  • @iluxa1810: Лучше написать к нему ответ, проблема-то часто встречается – VladD Apr 22 '18 at 11:32
  • @VladD, еще вопрос. А если у меня внутри ProjectInfo есть еще одна коллекция и я хотел бы ее забиндить на ListBox. Т.е меняя ComboBox переключать ListBox. Как это будет выглядеть? – iluxa1810 Apr 22 '18 at 11:39
  • @iluxa1810: Тут недавно как раз был вопрос на эту тему, сейчас найду. // А, это ваш же: https://ru.stackoverflow.com/q/817018/10105 – VladD Apr 22 '18 at 12:21

0 Answers0