2016-07-18 5 views
0

Im пытается установить значение по умолчанию ComboBox. Я использую привязку в макете, и я не уверен, как правильно привязать ее. Вот мой viewModel:По умолчанию выбранное значение в ComboBox

public class ViewModel : INotifyPropertyChanged 
{ 
    private Sklady sklady = null; 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 

    public Sklady Sklady 
    { 
     get 
     { 
      return this.sklady; 
     } 
     set 
     { 
      this.sklady = value; 
      NotifyPropertyChanged("Sklady"); 
     } 
    } 
} 

Как я установить данные в viewModel:

private void comboBoxSklad_Loaded(object sender, RoutedEventArgs e) 
{ 
    //get some data 
    prijemWindow.viewModel.Sklady = sklady; 
    prijemWindow.viewModel.Sklady.skladID = prijemWindow.viewModel.Radky.radky[index].SKLAD; 
} 

Мой viewModel использовать этот класс, чтобы получить значения:

[DataContract] 
public class Sklady 
{ 
    [DataMember] 
    public List<Sklad> sklady { get; set; } 
    [DataMember] 
    public String skladID { get; set; } 

    public class Sklad 
    { 
     public string ID { get; set; } 
     public string NAME { get; set; } 
     public string CODE { get; set; } 
    } 
} 

И это ток xaml код:

<ComboBox Name="comboBoxSklad" Loaded="comboBoxSklad_Loaded" ItemsSource="{Binding Sklady.sklady}" DisplayMemberPath="CODE" 
     SelectedValuePath="ID" SelectedItem="{Binding Sklady.skladID}"/> 

Данные привязаны к ComboBox правильно, и я могу видеть данные от skladyList. Но я хотел бы установить значение ComboBox по умолчанию skladID. Как мне это сделать?

ОТВЕТ

С ответом от Klaus Byskov Pedersen я получаю это работает ... Во-первых, я использую SelectedValue вместо SelectedItem ... Тогда я ininialize Sklady в конструкторе prijemWindow.viewModel.Sklady = new Sklady();prijemWindow.viewModel.Sklady = new Sklady(); и в конце, изменённые строки:

sklady.skladID = prijemWindow.viewModel.Radky.radky[index].SKLAD; 
prijemWindow.viewModel.Sklady = sklady; 

Большое спасибо!

ответ

2

Использовать SelectedValue вместо SelectedItem.

<ComboBox Name="comboBoxSklad" Loaded="comboBoxSklad_Loaded" ItemsSource="{Binding Sklady.sklady}" DisplayMemberPath="CODE" 
    SelectedValuePath="ID" SelectedValue="{Binding Sklady.skladID}"/> 

При использовании SelectedItem связанный элемент будет иметь тип Sklady, не string.

EDIT `

prijemWindow.viewModel.Sklady = sklady; 
prijemWindow.viewModel.Sklady.skladID = prijemWindow.viewModel.Radky.radky[index].SKLAD; 

У вас есть NotifyPropertyChanged при установке viewModel.Sklady, но в то время это обжигали, вы еще не установить skladID так попытайтесь изменить порядок этих двух утверждений.

+0

Спасибо за ответ! Это действительно полезно ... но все еще не работает. Мое предположение заключается в том, что проблема заключается в 'ItemsSource =" {Binding Sklady.sklady} "и' SelectedValue = "{Binding Sklady.skladID}" '... но я Не знаю, как правильно установить эти два значения, чтобы заставить его работать. – Sk1X1

+0

@ Sk1X1 см. мое редактирование. –

+0

Вам нужно инициализировать свой список ('Склады') где-нибудь, например. в конструкторе. Вы лучше переместите свой класс «Sklad» из класса Sklady, и последний на самом деле не имеет смысла. У вас есть один «skladId» для списка «Sklad's?»? Зачем? – mechanic

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