2017-12-19 18 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.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());    
    } 

편집 : 당신의 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

대단히 감사합니다. –