2016-12-12 14 views
0

手動更新で観察コレクションバインドさデータグリッドに対処する方法以来、今私はデータグリッドに持って

[Serializable] 
public class CfgPartPrograms 
{ 
    public CfgPartPrograms() { } 
    public string Group{ get; set;} 
    public string Description{ get; set;} 
    public string Filename{ get; set;}<------set with openfiledialog 
    public string Notes{ get; set;} 
} 

で監視可能なコレクション

ObservableCollection<CfgPartPrograms> obcCfgPartPrograms = new ObservableCollection<CfgPartPrograms>(); 

にバインドされ

<DataGrid Name="dtgFeatures" Height="100" Margin="10" ColumnWidth="*" CanUserAddRows="True" MouseLeftButtonUp="DtgFeatures_MouseLeftButtonUp"/> 

openfileDialogでファイル名を挿入できるようにしたいこのコードを追加しました:

private void DtgFeatures_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    int column = (sender as DataGrid).CurrentCell.Column.DisplayIndex; 
    if (column == 2) 
    { 
     OpenFileDialog ofdPP = new OpenFileDialog(); 
     if (ofdPP.ShowDialog() == true) 
     { 
      if (obcCfgPartPrograms.Count == 0) 
       obcCfgPartPrograms.Add(new CfgPartPrograms() { Filename = ofdPP.FileName }); 
      else 
       obcCfgPartPrograms[selectedIndex].Filename = ofdPP.FileName; 
      dtgFeatures.ItemsSource = null; 
      dtgFeatures.ItemsSource = obcCfgPartPrograms; 
     } 
    } 

ファイル名を設定すると、observableコレクションがまだ更新されていないという問題があります。 私は画像とその説明します:

enter image description here

だから私はAAAAとBBBを追加した今、私は上記のコードでファイル名を強制したいが、私はバインドアクションが上まだ行われていないことを行うときaaaaとbbbbが存在しないように観察可能なコレクション。要するに

enter image description here

バインディングを更新するためにバインドさデータグリッドを伝えるためにどのように?事前 で

おかげパトリック

答えて

1

はあなたのCfgPartProgramsクラスはINotifyPropertyChangedインターフェイスを実装し、データバインドプロパティが新しい値に設定されるたびにPropertyChangedイベントを発生させる必要があります:私はそれを見つけたhttps://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx

[Serializable] 
public class CfgPartPrograms : System.ComponentModel.INotifyPropertyChanged 
{ 
    public CfgPartPrograms() { } 

    public string Group { get; set; } 
    public string Description { get; set; } 
    private string _fileName; 

    public string Filename 
    { 
     get { return _fileName; } 
     set { _fileName = value; NotifyPropertyChanged(); } 
    } 

    public string Notes { get; set; } 

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

あなたのアイデアは正しいと思いますが、それは解決策ですが動作しません。最初は、ファイル名が変更されたときではなく、他のメンバーが行うときに、観測可能なコレクションを更新する必要があると私は思っています。だから私は通知されたプロパティをグループに変更しました。ただし、データグリッドにデータを入力してEnterキーを押した後も、GroupプロパティのSetコードはヒットしません。 – Patrick

+0

データグリッドの手作業による変更は、観察可能なコレクションに反映されません – Patrick

+0

ソースプロパティは、デフォルトで行から離れたときに設定されます。 Cellによって変更をコミットしない限り、明示的にCommitEditメソッドを呼び出す必要はありません。http://blog.scottlogic.com/2009/01/21/wpf-datagrid-committing-changes-cell-by-cell .html。しかしこれは元のものよりも別の問題です。問題が解決した場合は、その旨を覚えておいてください。 – mm8

0

here :私は行方不明だった

dtgFeatures.CommitEdit(DataGridEditingUnit.Row, true); 

コマンド

関連する問題