我有一个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; }
}
答案 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>