2010-08-24 5 views
0

Lorsque la liaison de données à combobox, 3 articles doivent être configurés:question Databinding avec ComboBox

<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyItem}" DisplayMemberPath="MyName" /> 

Say ItemSource est la liste des pays

Je ItemSource mis à bonne source d'une part, il est très bien. Ensuite, j'ai défini selectedItem sur un objet Country spécifique, mais cela ne fonctionne pas.

On dirait que tous doivent être définis quand ItemSource est défini.

Comment résoudre ce problème?

Répondre

0

MISE A JOUR AVEC LE CODE DE TRAVAIL

Assurez-vous de permettre à deux voies de liaison sur le SelectedItem.

<ComboBox ItemsSource="{Binding Path=Countries, Mode=OneWay}" SelectedItem="{Binding Path=SelectedCountry, Mode=TwoWay}" Height="23" HorizontalAlignment="Left" Margin="12,28,0,0" Name="comboBox1" VerticalAlignment="Top" Width="267" /> 

Voici ce que votre contexte ressemblera:

public partial class MainPage : UserControl, INotifyPropertyChanged 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     this.Countries = new ObservableCollection<string> { "USA", "CAN" }; 
     this.DataContext = this; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    public ObservableCollection<string> Countries { get; set; } 

    private string _selectedCountry = null; 
    public string SelectedCountry 
    { 
     get { return _selectedCountry; } 
     set 
     { 
      _selectedCountry = value; 
      if(this.PropertyChanged != null) 
       this.PropertyChanged(this, new PropertyChangedEventArgs("SelectedCountry")); 
     } 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show("Selected Country: " + this.SelectedCountry); 
    } 

} 
+0

BTW, la base.OnPropertyChanged suppose que vous dérivez d'une classe ViewModel de base. Sinon, vous appelez l'événement modifié par la propriété de INotifyPropertyChanged. –

+0

Merci. Je l'ai fait exactement comme tu l'as fait. mais je ne peux toujours pas afficher selectedCountry. J'utilise IEnumerable pour la liste de pays. Je charge la liste dans app.xmal, pas dans une VM spécifique car elle est supposée pour tous les vms. – KentZhou

+0

Découvrez quelque chose d'intéressant: code dur pour tester comme // avant: SelectedItem est null this.xCountry.SelectedItem = ((AddressViewModel) ctx) .SelectedCountry; // Après: SelectedItem est toujours NULL Ne comprends pas. – KentZhou