none
WPF DataGrid CellEditingTemplateでCombobox編集データが次の編集セルに RRS feed

  • 質問

  • 言語: VisualStudio2010 C# WPF

    DataGridのセルの編集で困っています。少しわかりづらいかも知れませんがお願いします。

    編集モードで選択したセルのデータが他のセルの編集モードに切り替わったときに表示されてしまい、そのセルのもともとあったデータが上書き表示されてしまいます。
    例としては、
    初期状態:セルA{ コンボA(DataA選択中)、コンボB(DataB選択中)}
         セルB{ コンボA(DataA選択中)、コンボB(DataB選択中)}
    セルAを{コンボA(DataC選択中)、コンボB(DataD選択中)}に変更し編集モードを抜ける。
    するとセルBで編集モードに入るときセルBの初期状態データが
    セルB{ コンボA(DataC選択中)、コンボB(DataD選択中)}というように表示されてしまう。

    なぜこのようになるのかがわかりません。

    コードは以下のような感じです。

    DataGridTemplateColumn.CellTemplateでTextBlockを二つ、
    DataGridTemplateColumn.CellEditingTemplateでComboBoxを二つ縦に並べます。

    ItemsSource="{Binding ListA}"、SelectedValue="{Binding ValA_1}",
    ItemsSource="{Binding ListB}"、SelectedValue="{Binding ValB_1}"をバインドし、
    DisplayMemberPath、SelectedValuePathを設定しました。

    同じ列を
    ItemsSource="{Binding ListA}"、SelectedValue="{Binding ValA_2}"
    ItemsSource="{Binding ListB}"、SelectedValue="{Binding ValB_2}" …… のように5列つくり

    DataGridのItemsSource="{Binding list_Data}"をバインドしました。

    list_Dataのなかは以下のような感じです。
    List<ClassA> list_Data{get;set;}
    public class ClassA : INotifyPropertyChanged
    {
       public IList ListA{ get; set; }
       public IList ListB{ get; set; }

       private string _ValA_1;
       private string _ValB_1;
       private string _ValA_2;
       private string _ValB_2;
       …

       public string ValA_1
       {
          get { return _ValA_1; }
       set
          {
               _ValA_1 = value;
               NotifyPropertyChanged("ValA_1");
          }
       }
       …
    }

    2013年3月12日 4:59

すべての返信

  • 返信が遅くなり申し訳ありません。

    この実装ですが、1つのClassAインスタンスの同じプロパティを5列ともバインドしているということでよろしいですか?

    であれば、5つの列がそれぞれ同じプロパティを変更しているので、フォーカスが抜ける際に変更が反映されてしまうと思います。

    別の値にするのであれば、それぞれに対し1つのプロパティを定義しておく必要があるかと思います。

    • 回答の候補に設定 星 睦美 2013年4月22日 2:13
    2013年4月14日 7:49