2013-07-02 5 views
2

아주 간단한 CRUD WPF 응용 프로그램을 만들려고합니다. 두 개의 열, ID 및 범주가있는 DataGrid가 있습니다. 카테고리의 경우 추가 및 수정시 목록에서 선택하고 싶습니다. 뒤에 코드에서WPF DataGrid DataGridTemplateColumn ComboBox ItemSource

<DataGrid Name="dataGridBudgetEntries" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="True" RowEditEnding="dataGridBudgetEntries_RowEditEnding"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding ID}" Header="ID" IsReadOnly="True"></DataGridTextColumn> 
     <DataGridTemplateColumn Header="Category"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding CategoryName}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <ComboBox></ComboBox> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

나는 다음과 같은 한 : : 여기가 XAML에서 지금까지이 무엇 그리드를 채울

public MainWindow() 
{ 
    InitializeComponent(); 

    dataGridBudgetEntries.ItemsSource = FinancialManagementDatabase4ME.BLL.GetBudgetEntriesForDataGrid(); 
    List<Category> categories = FinancialManagementDatabase4ME.BLL.GetCategories(); 
} 

과 범주에 대한 표시 값은 올바른 것입니다. 데이터 테이블에 콤보 상자를 정의하여 다른 범주의 목록과 함께 선택한 값을 표시하는 방법을 알아낼 수 없습니다. 나는 수많은 예제를 보았지만 아무 것도 할 수 없었습니다.

답변

3
<DataGrid AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="True" ItemsSource="{Binding Entries}" RowEditEnding="dataGridBudgetEntries_RowEditEnding"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding ID}" Header="ID" IsReadOnly="True"></DataGridTextColumn> 
     <DataGridTemplateColumn Header="Category"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Category}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <ComboBox ItemsSource="{Binding Categories}"></ComboBox> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 


public MainWindow() 
{ 
    InitializeComponent(); 
    this.DataContext = new MyViewModel(); 
} 

public class MyViewModel : ViewModelBase 
{ 
    public MyViewModel() 
    { 
     this.Entries = FinancialManagementDatabase4ME.BLL.GetBudgetEntriesForDataGrid(); 
     this.Categories = FinancialManagementDatabase4ME.BLL.GetCategories(); 
    } 

    private ObservableCollection<BudgetEntries> entries; 
    public ObservableCollection<BudgetEntries> Entries 
    { 
     get 
     { 
      return this.entries; 
     } 

     set 
     { 
      if (value != this.entries) 
      { 
       this.entries = value; 
       this.OnPropertyChanged("Entries"); 
      } 
     } 
    } 

    private ObservableCollection<Category> categories; 
    public ObservableCollection<Category> Categories 
    { 
     get 
     { 
      return this.categories; 
     } 

     set 
     { 
      if (value != this.categories) 
      { 
       this.categories = value; 
       this.OnPropertyChanged("Categories"); 
      } 
     } 
    } 
} 

public class BudgetEntries : ViewModelBase 
{ 
    private string id; 
    public string Id 
    { 
     get 
     { 
      return this.id; 
     } 

     set 
     { 
      if (value != this.id) 
      { 
       this.id = value; 
       this.OnPropertyChanged("Id"); 
      } 
     } 
    } 

    private string category; 
    public string Category 
    { 
     get 
     { 
      return this.category; 
     } 

     set 
     { 
      if (value != this.category) 
      { 
       this.category = value; 
       this.OnPropertyChanged("Category"); 
      } 
     } 
    } 
} 
0

당신은 항목에 따라 선택해야하는 데이터 그리드를 통지 할 수 있도록 데이터 항목 클래스 (각 행의 데이터를 제공하는 데 사용하는 유형)에에서 INotifyPropertyChanged 인터페이스를 상속하고 PropertyChangedEventHandler를 사용할 필요가 해당 행에 대해 해당 유형의 특성을 업데이트 할뿐만 아니라 데이터 유형의 특성을 선택하십시오. WPF Datagrid Combobox 칼럼 (http://www.dylansweb.com)이라는 블로그 항목을 살펴보십시오. 내가 믿는 것이 필요한 것일뿐입니다.

관련 문제