我在WPF中有一个Datagrid,我有一个第一列是DataGridComboBoxColumn。
我想做的是使用组合框来为该列添加标题:在整个列中传播标题更改标题。
我可以直观地完成此操作,但是当我提交数据时,与Datagrid绑定的列表不会带有新的组合框值。
<dg:DataGridComboBoxColumn SelectedItemBinding="{Binding BIBStatus}"
ItemsSource="{Binding Source={StaticResource typeStatus}}"
Width="0.20*">
<dg:DataGridComboBoxColumn.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="Built-In Bridge"/>
<ComboBox SelectedItem="{Binding BIBStatus}"
SelectionChanged="ComboBox_SelectionChanged"
ItemsSource="{Binding Source={StaticResource typeStatus}}"/>
</StackPanel>
</DataTemplate>
</dg:DataGridComboBoxColumn.HeaderTemplate>
</dg:DataGridComboBoxColumn>
在ComboBox_SelectionChanged中,我有以下代码:
DataGridColumn comboCol = this.gridResults.Columns[0];
for (int i = 0; i < this.gridResults.Items.Count; i++)
{
ComboBox myCmBox = (comboCol.GetCellContent(this.gridResults.Items[i]) as ComboBox);
myCmBox.SelectedValue = ((ComboBox)sender).SelectedValue;
}
当我提交数据时,我将DataContext列表提交给Datagrid;如果我一次更改第一列寻址行的值,即单击每行中带有组合框的单元格,则值将传播到DataContext中的列表,但是如果我通过标题更改第一列的值它没有。
谁能告诉我我缺少什么?我猜这是影响每一行的方式,但我尝试过SelectedValue,SelectedItem和SelectedIndex ...都无济于事。
提前致谢...
答案 0 :(得分:0)
我想我可能已经解决了......或者至少是伪装了......
DataGridColumn comboCol = this.gridResults.Columns[0];
for (int i = 0; i < this.gridResults.Items.Count; i++)
{
ComboBox myCmBox = (comboCol.GetCellContent(this.gridResults.Items[i]) as ComboBox);
myCmBox.SelectedItem = ((ComboBox)sender).SelectedItem;
}
if (this._results != null)
{
foreach (Device device in _results)
{
device.BIBStatus = (TypeStatus)Enum.ToObject(typeof(TypeStatus), ((ComboBox)sender).SelectedValue);
}
}
我试图只更改datacontext并希望双向绑定能够正常工作,但只有当我专注于每一行的组合框时才会这样做。所以我想:“为什么不是两种方式?” 如您所见,我更改了每个组合框的选择项和每个设备的BIB状态(datacontext部分)。这样我就能获得理想的效果。
但是我不认为这个解决方案是最好的解决方案,我仍然希望有一种方法可以做到这一点,而不是一个坏蛋。
仍然欢迎任何建议!