2010-08-24 2 views
0

При связывании данных в выпадающем списке, 3 элементы должны быть установлены:Databinding проблема с ComboBox

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

Say ItemSource является список Страна

Я установил ItemSource направо источника, во-первых, это прекрасно. Затем я устанавливаю selectedItem для конкретного объекта Country, но он не работает.

Похоже, что все настройки должны быть установлены при установке ItemSource.

Как решить эту проблему?

ответ

0

ОБНОВЛЕНИЕ рабочий код

Убедитесь, что вы включили двухстороннее связывание на 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" /> 

Вот что ваш контекст будет выглядеть следующим образом:

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, то base.OnPropertyChanged предполагает, что вы проистекают из базового класса ViewModel. В противном случае вы вызовете событие измененного свойства из INotifyPropertyChanged. –

+0

Спасибо. Я сделал то, что сделал. но я все еще не могу отобразить selectedCountry. Я использую IEnumerable для списка стран. Я загружаю список в app.xmal, а не в конкретную виртуальную машину, потому что он предназначен для всех vms. – KentZhou

+0

Узнайте что-то интересное: жесткий код для тестирования, например // before: SelectedItem is null this.xCountry.SelectedItem = ((AddressViewModel) ctx) .SelectedCountry; // После: SelectedItem все еще null Не понимаю. – KentZhou

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