2017-02-07 11 views
0

Я знаю, что это было задано раньше, но по какой-то причине кажется, что он работает только для меня. Я настроил мой XAML, как это:combobox selection запускает другой выбор combobox и т. Д. В WPF

<Grid> 
     <ComboBox x:Name="cbCategories" ItemsSource="{Binding Categories}" DisplayMemberPath="Name" SelectedIndex="{Binding SelectedCategoryIndex}"/> 
     <ComboBox x:Name="cbSourceParam" ItemsSource="{Binding SourceParameters}" DisplayMemberPath="Name" SelectedIndex="{Binding SelectedSourceParameterIndex}"/> 
     <ComboBox x:Name="cbTargetParam" ItemsSource="{Binding TargetParameters}" DisplayMemberPath="Name" SelectedIndex="{Binding SelectedTargetParameterIndex}"/> 
    </Grid> 

Тогда мои ViewModel, как это:

public class pmCopyParamToParamViewModel : ViewModelBase 
    { 
     public pmModel model; 
     public ObservableCollection<CategoryWrapper> Categories { get; private set; } 

     public pmCopyParamToParamViewModel(Document doc) 
     { 
      this.model = new pmModel(doc); 
      this.Categories = model.CollectCategories(); 
      SelectedCategoryIndex = 0; 
     } 

     private ObservableCollection<ParameterWrapper> _sourceParameters; 
     public ObservableCollection<ParameterWrapper> SourceParameters 
     { 
      get { return _sourceParameters; } 
      set 
      { 
       if (_sourceParameters == value) return; 

       _sourceParameters = value; 
       RaisePropertyChanged(() => SourceParameters); 
       SelectedSourceParameterIndex = 0; 
      } 
     } 

     private ObservableCollection<ParameterWrapper> _targetParameters; 
     public ObservableCollection<ParameterWrapper> TargetParameters 
     { 
      get { return _targetParameters; } 
      set 
      { 
       if (_targetParameters == value) return; 

       _targetParameters = value; 
       RaisePropertyChanged(() => TargetParameters); 
       SelectedTargetParameterIndex = 0; 
      } 
     } 

     // logic for selected category index 
     private int _selectedCategoryIndex; 
     public int SelectedCategoryIndex 
     { 
      get { return _selectedCategoryIndex; } 
      set 
      { 
       if (_selectedCategoryIndex == value) return; 

       _selectedCategoryIndex = value; 
       RaisePropertyChanged(() => SelectedCategoryIndex); 
       SourceParameters = model.CollectParameters(Categories[SelectedCategoryIndex].ID, new string[] { "String", "Double", "Integer" }); 
      } 
     } 

     private int _selectedSourceParameterIndex; 
     public int SelectedSourceParameterIndex 
     { 
      get { return _selectedSourceParameterIndex; } 
      set 
      { 
       if (_selectedSourceParameterIndex == value) return; 

       _selectedSourceParameterIndex = value; 
       RaisePropertyChanged(() => SelectedSourceParameterIndex); 
       TargetParameters = model.CollectParameters(Categories[SelectedCategoryIndex].ID, new string[] { SourceParameters[SelectedSourceParameterIndex].StorageType }); 
      } 
     } 

     private int _selectedTargetParameterIndex; 
     public int SelectedTargetParameterIndex 
     { 
      get { return _selectedTargetParameterIndex; } 
      set 
      { 
       if (_selectedTargetParameterIndex == value) return; 

       _selectedTargetParameterIndex = value; 
       RaisePropertyChanged(() => SelectedTargetParameterIndex); 
      } 
     } 
    } 

То, что я ожидал, чтобы это произошло, что на ViewModel initilization, было бы собрать все категории. Я затем вызвать SelectedCategoryIndex и установить его на 0. Это, в свою очередь, должно вызвать SourceParameters обновить и установить выбранный элемент изначально 0. Это, в свою очередь, вызовет TargetParameters для запуска и установить начальное SelectedParameterIndex 0.

До сих пор, Я только вижу, что параметры категорий и исходных параметров установлены, но combobox Target Paramters не устанавливается до тех пор, пока я вручную не коснусь/не меняю выделение для параметра combobox параметров источника.

Я что-то пропустил? Благодаря!

ответ

1

Может ли это быть проблемой?

private int _selectedSourceParameterIndex; // Starts off as 0 
public int SelectedSourceParameterIndex 
{ 
    set 
    { 
     // Setting to zero would not change the value, and this will return 
     if (_selectedSourceParameterIndex == value) return; 

     //... nothing here gets executed ... 
     _selectedSourceParameterIndex = value; 
     RaisePropertyChanged(() => SelectedSourceParameterIndex); 
     TargetParameters = model.CollectParameters(Categories[SelectedCategoryIndex].ID, new string[] { SourceParameters[SelectedSourceParameterIndex].StorageType }); 
    } 
} 

Я лично предпочитаю связывание SelectedItem вместо SelectedIndex. Он даст вам фактический объект (или null, если ни один не выбран), поэтому вам не нужно иметь дело с тонкостями индексации списков combobox/list.

+0

Вы правы. Это именно то, что происходило. Я переключил свою привязку на «SelectedItem», и теперь она работает нормально. Спасибо! – konrad

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

  • Нет связанных вопросов^_^