Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 为什么当我离开DataGridComboxColumn时,它会清除它的值?_Wpf_Data Binding_Validation_Datagridcomboboxcolumn - Fatal编程技术网

Wpf 为什么当我离开DataGridComboxColumn时,它会清除它的值?

Wpf 为什么当我离开DataGridComboxColumn时,它会清除它的值?,wpf,data-binding,validation,datagridcomboboxcolumn,Wpf,Data Binding,Validation,Datagridcomboboxcolumn,我有一个包含两列的DataGrid: DataGridComboxColumn DataGridTextColumn 我已经设置了数据验证,这样,如果一个有值,另一个将出错,直到它也有值为止。验证是愚蠢的,但它提供了一些简单的标准来进行验证,所以我可以说明这个问题 当我在文本单元格中键入内容时,按tab键,然后单击第一个单元格上的back,第一个单元格显示它处于错误状态(这是正确的)。问题是,当我从“组合框”下拉列表中选择某个内容并离开该单元格时(通过按tab键或在另一个单元格中单击),我为组合

我有一个包含两列的DataGrid:

  • DataGridComboxColumn
  • DataGridTextColumn 我已经设置了数据验证,这样,如果一个有值,另一个将出错,直到它也有值为止。验证是愚蠢的,但它提供了一些简单的标准来进行验证,所以我可以说明这个问题

    当我在文本单元格中键入内容时,按tab键,然后单击第一个单元格上的back,第一个单元格显示它处于错误状态(这是正确的)。问题是,当我从“组合框”下拉列表中选择某个内容并离开该单元格时(通过按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,但行为没有改变。

    从绑定中删除
    Mode=TwoWay

    该问题是由剪贴板和自动化支持中的错误引起的。通过将单元格上的特殊属性设置为
    ClipboardContentBinding
    ,然后读取该值,可以实现这一点。如果绑定是双向的,它有时会将旧值从特殊属性推回到视图模型,验证错误似乎会触发这种行为<如果
    ClipboardContentBinding
    为空,则code>datagridboxcolumns和
    datagridcomboxcolumns
    将提供
    Binding
    SelectedItemBinding
    ,因此如果将其中任何一个设置为
    two-way
    绑定,将出现此错误


    如果不设置
    模式
    ,它将是
    默认值
    ,并使用属性中的默认值,即
    文本框的
    双向
    。文本
    组合框。对于特殊剪贴板属性,选择EdItem
    但选择
    单向

    我不明白这个
    ClipboardContentBinding发生了什么,以及它影响了什么属性,但是删除
    Mode=TwoWay
    为我解决了这个问题。Sooo…谢谢,我想。我想了解更多关于这个bug的信息,以及剪贴簿内容绑定是否可以被操纵来引起或删除它。