2013-07-02 123 views
2

我想创建一个非常简单的CRUD WPF应用程序。我有一个包含2列,ID和类别的数据网格。对于类别,我希望能够在添加和编辑时从列表中进行选择。这里是我迄今为止在XAML:WPF DataGrid的DataGridTemplateColumn组合框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> 

在后面的代码,我有以下几点:

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能够通知哪些项目应根据被选中的DataGrid数据类型的属性,以及更新该类型的属性,无论何时在组合框中进行选择。看看这个名为WPF Datagrid Combobox Column的博客文章:http://www.dylansweb.com。这将是你所需要的,我相信。

相关问题