2015-04-19 7 views
0

У меня есть выпадающий, который имеет источник пунктов типа ObservableCollection<Clinic>Привязка пользовательского объекта к WPF Combobox

<ComboBox ItemsSource="{Binding Source={StaticResource ClinicList}}" DisplayMemberPath="Name" SelectedValue="{Binding Path=Name}" SelectedValuePath="Name"></ComboBox> 

Эти выпадающие находится в пределах ListView, который связан с EmployeeClinics.

public class Employee{ 
    public ObservableCollection<Clinic> EmployeeClinics { get; set; } 
} 

Когда я запускаю приложение, я вижу соответствующие клиники. И выпадающее меню, похоже, показывает правильные параметры, но когда я их обновляю, обновляется только имя, а не ClinicId (он хранит предыдущий ClinicId).

Редактировать: Аналогичным образом, когда я добавляю новую клинику в список и выбираю ее из параметров, это Id равен 0, когда я смотрю на коллекцию.

enter image description here

Вот моя клиника модель.

public class Clinic { 
     public int ClinicId { get; set; } 
     public string _name { get; set; } 
     public string Name { 
      get { 

      return _name;} 
      set { 
       if (_name != value) { 
        _name = value; 
       } 
      } 
     } 
} 

UPDATE: Благодаря @AyyappanSubramanian. Я продвигаюсь вперед. Я обновил свои объекты

public class Employee{ 
    public ObservableCollection<ClinicView> EmployeeClinics { get; set; } 
} 


public class ClinicView { 

    private Clinic selectedClinic; 
    public Clinic SelectedClinic { 
     get { return selectedClinic; } 
     set { 
      selectedClinic = value; 
      selectedClinicId = selectedClinic.ClinicId; 
     } 
    } 

    private int selectedClinicId; 
    public int SelectedClinicId { 
     get { return selectedClinicId; } 
    } 
} 

XAML:

<ComboBox ItemsSource="{Binding Source={StaticResource ClinicList}}" DisplayMemberPath="Name" SelectedItem="{Binding SelectedClinic}"></ComboBox> 

Изменение раскрывающиеся меню теперь правильно изменяет базовый объект и обновляет список, как хотелось бы. Теперь моя единственная проблема заключается в том, что в comboboxes не отображается текущий объект, просто показывается как пустой при запуске. Я не сработал с SelectedValue и Path без везения. Какие-либо предложения?

+0

Можете ли вы опубликовать модель и модель, чтобы воспроизвести вашу проблему. –

+0

Что происходит, когда вы меняете привязку с StaticResource на DynamicResource? – Markus

+0

@AyyappanSubramanian Я обновил сообщение. Помогает ли это? Как и в ответе Фабио, я прокомментировал и могу получить имена, чтобы они отображались соответственно, но идентификаторы не обновляются на основе новых выборов. – markokstate

ответ

1

См. Приведенный ниже код. Вы можете использовать SelectedItem, чтобы получить как ID, так и Name в одном SelectedObject. Получите только ID, используя SelectedValue.

<ComboBox ItemsSource="{Binding Clinics}" DisplayMemberPath="ClinicName" 
       SelectedValuePath="ClinicId" SelectedValue="{Binding SelectedClinicId}"     
       SelectedItem="{Binding SelectedClinic}"/> 


public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = new ViewModel(); 
    }   
} 

class Clinic 
{ 
    public int ClinicId { get; set; } 
    public string ClinicName { get; set; } 
} 

class ViewModel 
{ 
    public ObservableCollection<Clinic> Clinics { get; set; } 
    public ViewModel() 
    { 
     Clinics = new ObservableCollection<Clinic>(); 
     for (int i = 0; i < 10; i++) 
     { 
      Clinics.Add(new Clinic() { ClinicId=i+1,ClinicName="MyClinic"+(i+1) }); 
     } 
    } 

    private int selectedClinicId; 

    public int SelectedClinicId 
    { 
     get { return selectedClinicId; } 
     set 
     { 
      selectedClinicId = value; 
     } 
    } 


    private Clinic selectedClinic; 

    public Clinic SelectedClinic 
    { 
     get { return selectedClinic; } 
     set 
     { 
      selectedClinic = value; 
      MessageBox.Show("ID:"+selectedClinic.ClinicId.ToString()+" "+"Name:"+selectedClinic.ClinicName); 
     } 
    } 

} 
+0

Я успешно получил объекты, работающие (они связаны при изменении), но в списках не отображаются текущий элемент правильно. Какие-либо предложения? Я обновил свой вопрос с новой информацией. Они показывают правильно после того, как я его выбрал, но просто покажу пусто. – markokstate

+0

wait, не видел эту другую часть viewModel. позвольте мне уточнить, что слишком – markokstate

+0

Да, хм, возможно, не получится правильно их инициализировать. – markokstate

Смежные вопросы