完整的XAML及其代码如下。我有一个带有DataGrid的窗口,其中只有一个列,即DataGridComboBoxColumn。在其EditingElementStyle中,我将ComboBox-es设置为可编辑,并将其ItemsSource设置为在ElementStyle属性中绑定到的同一集合。在我运行程序并尝试将单元格的值更改为另一个值之前,绑定似乎工作良好。尽管我目前仅从现有值中选择(以后我希望允许输入自定义项目),但该值不会保存,并且在移动焦点后会显示以前的值。
如果我只把它放在窗口中:
program
一切似乎都正常。
<StackPanel Orientation="Vertical">
<ComboBox ItemsSource="{Binding Path=MyGroups,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}}}" IsEditable="True"/>
<ComboBox ItemsSource="{Binding Path=MyGroups,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}}}" IsEditable="True"/>
</StackPanel>
<Window x:Class="cs_wpf_test_11.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:cs_wpf_test_11"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="TestWindow" Height="450" Width="800">
<Grid>
<DataGrid Name="MyDataGrid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="My only column"
SelectedItemBinding="{Binding Value, Mode=TwoWay}"
TextBinding="{Binding Value}">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=MyGroups,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}}}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="IsEditable" Value="True"/>
<Setter Property="ItemsSource" Value="{Binding Path=MyGroups,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}}}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
预期:
Actual:用户执行与上述相同的步骤,但是在选择新值后聚焦另一个单元格时,先前聚焦的单元格将保留初始值。
答案 0 :(得分:0)
似乎TextBinding
已经与Mode=TwoWay
一起使用。我刚刚从标记中删除了这一行,一切都按预期进行:
SelectedItemBinding="{Binding Value, Mode=TwoWay}"