2017-02-07 21 views
0

これは前に尋ねられましたが、なんらかの理由でそれが私のためにある程度働いているようです。このようなコンボボックス選択は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に、それはすべてのカテゴリーを集めるだろうということです私はこのように私のXAMLを設定します。私はその後、SelectedCategoryIndexを呼び出し、順番に更新し、順番にトリガするTargetParametersをトリガすることを0に最初に選択した項目を設定するSourceParametersをトリガする必要があることを0に設定し、初期SelectedParameterIndex

0にこれまでに設定しました私は、カテゴリとソースパラメータが設定されているのを見ているだけですが、ターゲットパラメータのコンボボックスは、ソースパラメータのコンボボックスの選択を手動でタッチ/変更するまで設定されません。

ここで何か不足していますか?ありがとう!

答えて

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)。

+0

あなたは正しいです。それはまさに何が起きているのかです。私は自分のバインディングを 'SelectedItem'に切り替えました。ありがとうございました! – konrad

関連する問題