1

シンプルなDataGridTemplateColumnコンボボックスを作成しました。Visibility列全体と および のItemSourceバインドSelectedItemを設定しますComboBox(行ごとに異なる必要がありItemsSourceます)。列を非表示にするまで、すべて正常に機能します。その後 (もう一度表示します)、ComboBoxesは空ですが、ItemsSourceおよびSelectedItemバインディングのゲッターは適切な値を返します。バインディングのセッターを呼び出すとSelectedItem、以前の値は正しく、新しい値が に表示されComboBoxます。したがって、すべてが正しいのですが、なぜ列を非表示にした後、コンボボックスがリセットされ、データViewModelも正しく、何も変更されないのですか?

  <DataGridTemplateColumn Header="Total" Visibility="{Binding ProxyData.ReportConfigurationVM.ShowTotalRow, Source={StaticResource BindingProxy}, Converter={StaticResource BoolToVisibilityConverter}}">
     <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
           <ComboBox Width="70"
                     ItemsSource="{Binding Path=TotalsAggregationFunctions}"
                     SelectedItem="{Binding Path=SelectedTotalAggregation, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
           </ComboBox>
        </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
  </DataGridTemplateColumn>

私のビューモデル:

  public enum AggregationFunction
  {
     None,
     Sum,
     Avg
  }

  private AggregationFunction selectedTotalAggregation;
  public AggregationFunction SelectedTotalAggregation
  {
     get { return this.selectedTotalAggregation; }
     set { SetField(ref this.selectedTotalAggregation, value); }  // this calls OnPropertyNotify automatically
  }

  public IEnumerable<AggregationFunction> TotalsAggregationFunctions
  {
     get
     {
        // no matter what I return, nothing works when hide the column...
        return new AggregationFunction[] { AggregationFunction.None, AggregationFunction.Sum, AggregationFunction.Avg, AggregationFunction.Min, AggregationFunction.Max };
     }
  }

ComboBoxes非表示 (および表示) 列の後にリセットされたスクリーンショット。hide の後に感嘆符が表示されるため、hide が問題であることはわかっています。

コンボボックスは、列を非表示 (および表示) した後にリセットされます

何か案が?ありがとう。

4

1 に答える 1