2013-01-24 26 views
4

我有兩列一個DataGrid:爲什麼當我離開它時,我的DataGridComboBoxColumn會清除它的值?

  1. DataGridComboBoxColumn
  2. DataGridTextColumn。

我已經設置了數據驗證,以便如果有一個值,另一個會出錯,直到它也有一個值。驗證是愚蠢的,但它提供了一些簡單的標準來做驗證,所以我可以說明這個問題。

當我在文本單元格中鍵入內容時,按Tab鍵,然後單擊第一個單元格,第一個單元格顯示它處於錯誤狀態(這是正確的)。問題是,當我從組合框下拉菜單中選擇一些內容並導航離開該單元格時(通過按Tab或單擊其他單元格),我爲組合框選擇的值消失。每當屬性發生變化時,我都會將綁定設置爲更新我的源,因此一旦選中它,它就會設置爲我選擇的值。但是,當我離開單元格時,該屬性被設置爲空。如果單元格未處於錯誤狀態,則看不到此行爲。

任何人都可以幫忙嗎?這裏是我的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> 

我無法想象我在做什麼錯。我看到這個other link似乎描述了我遇到的同樣的問題,但爲他們工作的解決方案似乎不適合我;我添加了SelectedValueBinding和SelectedValuePath,但行爲沒有改變。

回答

4

從綁定中刪除Mode=TwoWay

該問題是由剪貼板和自動化支持中的錯誤引起的。這可以通過在單元格上設置一個特殊屬性ClipboardContentBinding然後讀取該值。如果該綁定是雙向的,則有時會將特殊屬性中的舊值推回到視圖模型,並且驗證錯誤似乎會觸發此行爲。 DataGridBoundColumnsDataGridComboBoxColumns將提供BindingSelectedItemBinding如果ClipboardContentBinding爲空,那麼如果將其中的任何一個設置爲TwoWay綁定,則會發生此錯誤。

如果不設置Mode,這將是Default和從屬性,這是TwoWayTextBox.TextComboBox.SelectedItemOneWay的特殊剪貼板屬性使用默認值。

+0

我不明白這個'ClipboardContentBinding'發生了什麼,它受到了什麼屬性的影響,但是刪除'Mode = TwoWay'解決了我的問題。 Sooo ...謝謝我的猜測。 –

相關問題