2011-03-23 28 views
2

這是我的代碼中的一個奇怪的錯誤,我不知道是什麼導致它。Silverlight:我有一個datagrid,只會讓我選擇第一行 - 我不知道爲什麼

構建數據網格的代碼似乎很好。它從功能上的數據網格複製而來。原因似乎是這個控制是小孩的控制。

編輯:在我的挫折中,我刪除了導航框架和我的控件之間的任何控件。我的控件使用基於泛型類的數據上下文,並且已經通過單元測試驗證它是否按預期工作 - 除了將List屬性設置爲基本上爲空的加載方法外。加載方法工作並返回一個已填充的可觀察集合。

所有加載和綁定。互動的作用是將網格和我的細節表單連接起來。

但是,可選擇的唯一單元格是第一行中的單元格 - 但是當您將鼠標懸停在其上時,其他行會突出顯示。他們只是不響應點擊事件。

最大的問題是:是否有人知道可能導致此行爲的任何條件(即嵌套控件)? 因爲我知道使用手風琴控制和scrollViewer會有各種令人討厭的副作用。編輯:我試着用這個控件代替它(它們繼承了同一個基礎對象,所以它們是兼容的,當我這樣做的時候,我得到了同樣的破壞行爲,這意味着viewmodel有問題......以上likley綁定(但數據顯示:/)...

DataGrid的代碼:

<sdk:DataGrid 
        AutoGenerateColumns="False" 
        x:Name="dgBankCodes" 
        ItemsSource="{Binding List}" 
        IsReadOnly="True" 
        SelectionMode="Single" > 

       <sdk:DataGrid.Columns> 
        <sdk:DataGridTextColumn Binding="{Binding Code}" CanUserSort="True" Header="Bank Code" IsReadOnly="True"/> 
        <sdk:DataGridTextColumn Binding="{Binding Name}" CanUserSort="True" Header="Name" IsReadOnly="True"/> 
        <sdk:DataGridTextColumn Binding="{Binding SortCode}" CanUserSort="True" Header="Sort Code" IsReadOnly="True"/> 
        <sdk:DataGridTextColumn Binding="{Binding AccountNumber}" CanUserSort="True" Header="Act No" IsReadOnly="True"/> 
        <sdk:DataGridTextColumn Binding="{Binding Description}" CanUserSort="True" Header="Description" IsReadOnly="True"/> 
        <sdk:DataGridTextColumn Binding="{Binding IBAN}" Header="IBAN" IsReadOnly="True"/> 
        <sdk:DataGridTextColumn Binding="{Binding BIC}" CanUserSort="True" Header="BIC" IsReadOnly="True"/> 
       </sdk:DataGrid.Columns> 
       <i:Interaction.Triggers> 
        <i:EventTrigger EventName="SelectionChanged"> 
         <i:InvokeCommandAction 
          Command="{Binding SelectObjectCommand}" 
          CommandParameter="{Binding SelectedItem, ElementName=dgBankCodes}"/> 
        </i:EventTrigger> 
       </i:Interaction.Triggers> 
      </sdk:DataGrid> 

回答

2

這種情況發生時,你會覆蓋你的對象類Equals方法制作確保每個對象在重寫的Equals方法中都是唯一的

+0

你可能會對此感到震驚。我只注意到我的單元測試在生成我的對象的T4模板上失敗。我忘了在基類上測試平等。 – 2011-03-23 18:29:10

+0

你也應該檢查你是否重寫了GetHashCode以及 – Aducci 2011-03-23 18:44:35

+0

是的,我重寫了正確的哈希碼。很高興你把這件事帶到了驚人的位置,datagrid使用Equals來比較行,大多數事情都使用GetHashCode的實現。我正在使用代碼生成,所以哈希代碼很簡單,Equals更加有趣,因爲需要在繼承的情況下進行分支操作,否則您將最終得到doign object.Equals,在這種情況下它始終是false。 – 2011-03-24 10:42:09

相關問題