我有一个包含两列的 DataGrid:
- 数据网格组合框列
- 数据网格文本列。
我已经设置了数据验证,这样如果一个有值,另一个就会出错,直到它也有一个值。验证很愚蠢,但它提供了一些用于验证的简单标准,因此我可以说明这个问题。
当我在文本单元格中输入内容时,按 Tab,然后单击第一个单元格,第一个单元格显示它处于错误状态(这是正确的)。问题是,当我从组合框下拉列表中选择某些内容并离开该单元格(通过按 Tab 或单击另一个单元格)时,我为组合框选择的值会消失。每当属性更改时,我都会设置绑定来更新我的源,因此只要我选择它,它就会设置为我选择的值。但是,当我离开单元格时,该属性被设置为 null。如果单元格未处于错误状态,我看不到此行为。
有人可以帮忙吗?这是我的 DataGrid 的 XAML:
<DataGrid Grid.Row="2"
Name="GrdData"
ItemsSource="{Binding Path=Dvm.Data}"
SelectedItem="{Binding Path=Dvm.SelectedData, Mode=TwoWay}"
CanUserAddRows="True"
CanUserDeleteRows="False"
AutoGenerateColumns="False"
Margin="5"
SelectionMode="Single"
IsEnabled="{Binding Path=IsGridEnabled}">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Column 1"
SelectedItemBinding="{Binding Path=Col1, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
Width="*"
DisplayMemberPath="Description">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=DropDownValues, Mode=OneWay}" />
<Setter Property="IsSynchronizedWithCurrentItem" Value="False"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=DropDownValues, Mode=OneWay}"/>
<Setter Property="IsDropDownOpen" Value="True" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Header="Column 2"
Binding="{Binding Path=Col2, Mode=TwoWay, ValidatesOnDataErrors=True}"
Width="*"/>
</DataGrid.Columns>
</DataGrid>
我无法想象我做错了什么。我看到这个其他链接似乎描述了我遇到的同样问题,但对他们有用的解决方案似乎对我不起作用;我添加了 SelectedValueBinding 和 SelectedValuePath,但行为没有改变。