Mat*_*llo 4 data-binding validation wpf datagridcomboboxcolumn
我有一个包含两列的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>
Run Code Online (Sandbox Code Playgroud)
我无法想象我做错了什么.我看到这个似乎描述了我遇到的同样问题的其他链接,但是对他们起作用的解决方案对我来说似乎不起作用; 我添加了SelectedValueBinding和SelectedValuePath,但行为没有改变.
Mode=TwoWay从绑定中删除.
问题是由剪贴板和自动化支持中的错误引起的.这通过在单元格上设置特殊属性ClipboardContentBinding然后读取值来工作.如果该绑定是双向的,则有时会将特殊属性中的旧值推回到视图模型,并且验证错误似乎会触发此行为. DataGridBoundColumns并且DataGridComboBoxColumns将提供Binding或者SelectedItemBinding如果ClipboardContentBinding为null,那么如果将其中任何一个设置为TwoWay绑定,则会出现此错误.
如果您没有设置做Mode,这将是Default从属性,它是使用默认TwoWay的TextBox.Text和ComboBox.SelectedItem,但OneWay对于特殊的clipboard属性.
| 归档时间: |
|
| 查看次数: |
2132 次 |
| 最近记录: |