2017-12-19 7 views
0

コンボボックスの列が定義されたカスタムDataGridを作成しました。私はitemsource値をコンボボックスに提供しようとしましたが、実行時にコンボボックスにデータを入力しません。ここにはC#とXAMLコードがあります。 ComboBoxはDataGridTemplateColumnのバインディングデータを表示しません


public class ComboboxViewModel 
{ 
    public List<string> Members { get; set; } 
    public List<string> Disciplines { get; set; } 

    public ComboboxViewModel() 
    { 
     this.Members = new List<string> 
     { 
      "Ali", "Mubashar", "Muffassir", "Nitin" 
     }; 

     this.Disciplines = new List<string> 
     { 
      "Architecture", "Mechanical", "Structure" 
     }; 
    } 
} 

public MainWindow() 
{ 
    InitializeComponent(); 
    datagrid_additionalinfo.Items.Add(new object()); 

    datagrid_additionalinfo.DataContext = new ComboboxViewModel(); 
} 

<DataGrid Name="datagrid_additionalinfo" Margin="20,0,20,0" IsReadOnly="False" SelectionMode="Single" CanUserAddRows="True" AutoGenerateColumns="False" SelectionUnit="Cell" > 

    <DataGrid.Columns> 

      <DataGridTemplateColumn Header="Discipline" Width="100" > 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox Width="200" ItemsSource="{Binding Disciplines}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

      <DataGridTemplateColumn Header="Members" Width="100"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox Width="200" ItemsSource="{Binding Members}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

    </DataGrid.Columns> 

</DataGrid> 

私は何かが欠けてるなら、私を修正してください。どうもありがとうございました。

答えて

1

DataGridの列「列」タグの内側に配置する必要があります。

<DataGrid ...> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="Discipline" Width="100" > 
      ... 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Members" Width="100"> 
      ... 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

そして、あなたがコードからアイテムを取り込む好むならば、あなただけの書き込み、のDataContextを使用する必要はありません。

public MainWindow() 
    { 
     InitializeComponent(); 
     datagrid_additionalinfo.Items.Add(new ComboboxViewModel());    
    } 

編集:

あなたは、たとえば、すべての項目が含まれているViewModelにを作成し、DataContextの使用を希望する場合:

その後、
public class MainViewModel 
{ 
    public List<ComboboxViewModel> Items { get; set; } 

    public MainViewModel() 
    { 
     Items = new List<ComboboxViewModel>() { new ComboboxViewModel()}; 
    } 
} 

とXAMLでそれにバインド:

<DataGrid Name="datagrid_additionalinfo" ItemsSource="{Binding Items}" ...> 

とセットアップのDataContext:XAMLコードを共有するための

public MainWindow() 
{ 
    InitializeComponent(); 
    datagrid_additionalinfo.DataContext = new MainViewModel(); 
} 
+0

感謝。私は実際にここにコードを貼り付けながらその行を逃した。私はdatagrid_additionalinfo.Items.Add(新しいComboboxViewModel())を使用することはできません。コード。私のデータグリッドには、ユーザがデータを入力するためのテキストボックスが含まれているからです。その少し複雑です。 xamlでデータをバインドするソリューションはありますか? –

+0

はい、編集された回答を参照 – Netstep

+0

ありがとう、それは働いた:-) –

関連する問題