2016-12-02 18 views
0

WPFデータグリッドを、タブで区切られたテキストファイルから読み取った不明な数の文字列にバインドする方法を見つけようとしています。私は背後にあるコードでのためのDataContextを設定するビューを持っている、と私はちょうどこのようなコンストラクタコードでデータグリッドを設定することを考え出し:C#WPF DatagridのObservableCollectionメンバーへのバインド

public MainWindow(FileParametersViewModel vm) 
{ 
    InitializeComponent(); 
    DataContext = vm; 
    dataGrid.ItemsSource = vm.lParams; 
    for (int i = 0; i < vm.ParamNames.Count(); i++) 
    { 
     DataGridTextColumn col = new DataGridTextColumn(); 
     col.Binding = vm.lParams.pArray[i]; 
     col.Header = vm.ParamNames[i]; 
     dataGrid.Columns.Add(col); 
    } 
} 

ViewModelには、私がしたいのObservableCollectionのlParamsを持っています

private ObservableCollection<FileSheetParameters> _lParams; 
public ObservableCollection<FileSheetParameters> lParams 
{ 
    get { return _lParams; } 
    set 
    { 
     if (value != _lParams) 
     { 
      _lParams = value; 
      NotifyPropertyChanged("lParams"); 
     } 
    } 
} 

各列がFileSheetParameters内​​のリストのメンバー(pArray)にバインドされます:にデータグリッドをバインド

public class FileSheetParameters 
{ 
    public FileSheetParameters() 
    { 
     SheetExists = false; 
     IsPlaceholder = false; 
     pArray = null; 
    } 

    public bool SheetExists { get; set; } 
    public bool IsPlaceholder { get; set; } 
    public List<string> pArray { get; set; } 
} 

私はEからリストを読み込みます私がそれを読むと、テキストファイルの行が表示されます。

私の問題は、私が実際にlParams.pArrayを最初のコードブロックで参照することはできないということです。 "ObservableCollectionに 'pArray'の定義が含まれていないというコンパイル時のエラーが発生します(と赤い波打ち)。しかし、pArrayはコレクション内にあるもののクラスのメンバーです。 ?

データグリッドのItemsソースを設定して、列固有のバインディングを行わないと、最後の列がpArrayで、各セルに「(コレクション)」という空のグリッドが表示されます。 。。。私が代わりのObservableCollectionのDataTableのを使用していたが、その振る舞いは私が好きなものではありません

答えて

0

この1つはすべての夜、私を盗聴し、私は解決策が見つかりました:背後にあるコードで

結合コマンドを李を見てください

string path = String.Format("pArray[{0}]", i); 
    col.Binding = new Binding(path); 

そして、データグリッドが正しく設定されます。