這是我的代碼中的一個奇怪的錯誤,我不知道是什麼導致它。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>
你可能會對此感到震驚。我只注意到我的單元測試在生成我的對象的T4模板上失敗。我忘了在基類上測試平等。 – 2011-03-23 18:29:10
你也應該檢查你是否重寫了GetHashCode以及 – Aducci 2011-03-23 18:44:35
是的,我重寫了正確的哈希碼。很高興你把這件事帶到了驚人的位置,datagrid使用Equals來比較行,大多數事情都使用GetHashCode的實現。我正在使用代碼生成,所以哈希代碼很簡單,Equals更加有趣,因爲需要在繼承的情況下進行分支操作,否則您將最終得到doign object.Equals,在這種情況下它始終是false。 – 2011-03-24 10:42:09