Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2015, 08:15   #1
Notan1310
Форумчанин
 
Регистрация: 01.01.2012
Сообщений: 118
По умолчанию При биндинге ComboBox выводится не то значение

Доброго времени суток. У меня стоит задача вывести название марок автомобилей в ComboBox
modelItem.cs
Код:
    public class ModelItem
    {
        public string id { get; set; }
        public string make_id { get; set; }
        public string name { get; set; }
        public string domestic { get; set; }
        public string sport { get; set; }
        public string parent_id { get; set; }
        public string power { get; set; }
        public string weight { get; set; }
        public string price { get; set; }
    }
ModelObject.cs
Код:
     public class ModelObject : IModelObject
    {
        public string _id { get; set; }
        public string _name { get; set; }
        public string _guarantee { get; set; }
        public List<ModelItem> _models { get; set; }
 
        public ModelObject(string id , string name, string guarante, List<ModelItem> models)
        {
            _id = id;
            _name = name;
            _guarantee = guarante;
            _models = models;
        }
          
        public string id
        {
            get { return _id; }
            set
            {
                if (value == _id) return;
                _id = value;
                RaisePropertyChanged("Id");
            }
        }
 
        public string name
        {
            get { return _name; }
            set
            {
                if (value == _name) return;
                _name = value;
                RaisePropertyChanged("name");
            }
        }
 
        public string guarantee
        {
            get { return _guarantee; }
            set
            {
                if (value == _guarantee) return;
                _guarantee = value;
                RaisePropertyChanged("guarantee");
            }
        }
 
 
        public List<ModelItem> models
        {
            get
            {
                if (_models == null)
                    _models = new List<ModelItem>();
                return _models;
            }
            set
            {
                RaisePropertyChanged("models");
                _models = value;
            }
        }
        
 
 
        public event PropertyChangedEventHandler PropertyChanged;
 
 
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
 
 
        protected void RaisePropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
 
    }
IModelObject.cs
Код:
    public interface IModelObject
    {
        string id { get; set; }
        string name { get; set; }
        string guarantee { get; set; }
        List<ModelItem> models { get; set; }
    }
Сам комбобокс в XAML
Код:
                <ComboBox SelectedIndex="0" HorizontalAlignment="Left" Margin="0,10,0,0" VerticalAlignment="Top" Width="148" 
                          SelectedValue="{Binding Path=name, Mode=TwoWay}"
                          ItemsSource="{Binding viewMarka}"
                          DisplayMemberPath="{Binding Path=name}"
                          >
                </ComboBox>
Но в итоге получается
a62b1PykSVI.jpg

Что я делаю не правильно? Спасибо!
Notan1310 вне форума Ответить с цитированием
Старый 17.12.2015, 11:17   #2
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Во первых зачем 2 одинаковых метода OnPropertyChanged и RaisePropertyChanged, одним никак не обойтись?
Во вторых для чего
public string _id { get; set; }
public string _name { get; set; }
public string _guarantee { get; set; }
public List<ModelItem> _models { get; set; }
сделаны открытые и свойства?
в третьих почему DisplayMemberPath="{Binding Path=name}" тут биндинг? и куда указывает SelectedValue="{Binding Path=name, Mode=TwoWay}"?
come-on вне форума Ответить с цитированием
Старый 17.12.2015, 17:57   #3
Notan1310
Форумчанин
 
Регистрация: 01.01.2012
Сообщений: 118
По умолчанию

Всем спасибо! Я решил эту проблему путем добавления в ViewModel добавить свойства
Код:
public ModelObject Selected{get;set;}
И изменением xaml формы
Код:
<ComboBox SelectedIndex="0" HorizontalAlignment="Left" Margin="0,10,0,0" VerticalAlignment="Top" Width="148" 
                          SelectedValue="{Binding Selected, Mode=TwoWay}"
                          ItemsSource="{Binding viewMarka}"
                          DisplayMemberPath="name"
                          >
                </ComboBox>
Notan1310 вне форума Ответить с цитированием
Старый 17.12.2015, 18:01   #4
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Это на другом форуме сказали а не вы решили.
И вопросы все равно остались.
come-on вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает конвертер типов при биндинге magnuz WPF, UWP, WinRT, XAML 1 08.10.2014 11:20
Почему выводится такое значение? (Си) Vimork Помощь студентам 7 05.01.2014 23:40
При выборе значения одного из трёх ComboBox выводить значение в Label TeliS Общие вопросы Delphi 2 23.09.2013 18:47
Не выводится ComboBox NeveX JavaScript, Ajax 0 04.02.2010 23:23