DataGridComboBox列不显示绑定集合中的值

时间:2015-12-02 03:44:32

标签: c# wpf datagrid

我有一个DataGrid。其中一列是ComboBox列。

我想只用两个选项来填充这个ComboBox。 '检查'或'转移'。

但是ComboBox保持为空,当我加载DataGrid时,此列为空。

查看

     <DataGrid x:Name="dataGridsupplier" 
                       ItemsSource="{Binding Collection}" 
                       AutoGenerateColumns="False">
          <DataGrid.Columns>
              <DataGridTextColumn Header="Full Company Name" Binding="{Binding fullCompanyName, UpdateSourceTrigger=PropertyChanged}" Width="*"/>
              <DataGridComboBoxColumn Header="Payment Method" 
                                      ItemsSource="{Binding Method}"
                                      SelectedItemBinding="{Binding methodOfPayment}"/>
          </DataGrid.Columns>
     </DataGrid>

视图模型

public class SupplierViewModel : ViewModelBase
{

    public Context ctx = new Context();

    public SupplierViewModel()
    {
        Get();
        Method = new List<string> { "Transfer", "Cheque" };
    }

    private ObservableCollection<foodSupplier> collection;

    public ObservableCollection<foodSupplier> Collection
    {
        get
        {
            return collection;
        }
        set
        {
            collection = value;
            OnPropertyChanged("Collection");
        }
    }

    private IList<string> _method;

    public IList<string> Method
    {
        get
        {
            return _method;
        }
        set
        {
            _method = value;
            OnPropertyChanged("Method");
        }
    }

    private void Get()
    {
        ctx.foodSuppliers.ToList().ForEach(supplier => ctx.foodSuppliers.Local.Add(supplier));
        Collection = ctx.foodSuppliers.Local;
    }
}

模型

public partial class foodSupplier
{
    public string fullCompanyName { get; set; }
    public string methodOfPayment { get; set; }
}

2 个答案:

答案 0 :(得分:1)

由于DataGridComboBoxColumn或任何其他受支持的数据网格列不属于datagrid的可视树,因此它们不会继承DataContext的{​​{1}}。因为,它们不在于可视化树,所以任何尝试使用RelativeSource获取datagrid都不会起作用。

解决方案 - 您可以创建一个代理元素来绑定窗口的数据上下文;使用该proxy元素绑定DataGridComboBoxColumn的ItemsSource。

DataContext

答案 1 :(得分:0)

  

这就是Datagrid的工作原理。你有一个CellTemplate和一个   CellEditingTemplate。前者只是一个文本块,后者是   组合框。同样,对于其他Datagrid列,您必须单击   单元格进入编辑模式。事实上,默认情况下你必须选择   行,然后是单元格。我承认这有点笨拙。

摘录自WPF - DataGridComboBoxColumn Problem

这是一个错误,可以在CodePlex找到一个很好的讨论。

如果您想一直看到组合框,您需要制作自己的列模板。 模板列工作得很好:

    <DataGridTemplateColumn Header="Payment Method">
          <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                   <ComboBox ItemsSource="{Binding Method}" 
                             SelectedItemBinding="{Binding methodOfPayment}"/>
                </DataTemplate>
          </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn>