2つの列を持つDataGridがあります。
- DataGridComboBoxColumn
- DataGridTextColumn。
データ検証を設定して、一方に値がある場合、もう一方にも値が含まれるまでエラーが発生するようにしました。検証はばかげていますが、検証を行うためのいくつかの簡単な基準を提供するので、この問題を説明できます。
テキストセルに何かを入力し、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を追加しましたが、動作は変わりませんでした。