當我從代碼更新一個DataGrid SelectedItem(通過ViewModel中的綁定對象),如何獲得可視化網格來突出顯示新選擇的項目?Silverlight DataGrid從代碼更新SelectedItem
謝謝,
馬克
UPDATE:這仍然是我的問題。我的SelectedItem屬性已經實現了更改通知,但是數據網格不是VISUALLY顯示哪一行已被選中 - 即它沒有被突出顯示。
當我從代碼更新一個DataGrid SelectedItem(通過ViewModel中的綁定對象),如何獲得可視化網格來突出顯示新選擇的項目?Silverlight DataGrid從代碼更新SelectedItem
謝謝,
馬克
UPDATE:這仍然是我的問題。我的SelectedItem屬性已經實現了更改通知,但是數據網格不是VISUALLY顯示哪一行已被選中 - 即它沒有被突出顯示。
我猜你真的驗證了SelectedItem
已經改變(你可以在Binding
模式設置爲TwoWay
暫看它是否正常工作倒過來,通過單擊行,你應該看到的亮點和SelectedItem
的set
-method執行)。如果是,請確認您真的與PropertyChanged
方法調用的屬性名稱完全匹配。由於您在這裏不是類型安全的,因此您可能犯了拼寫錯誤。如果不是,請檢查您的Databinding屬性是否設置正確。另一個想法是,你可能已經改變了DataGrid
的樣式或模板,現在你缺少一些可視狀態。 DataGridRow
可以使用樣式模板進行樣式設置。您有三個選定狀態,稱爲UnfocusedSelected
(可能是正確的),NormalSelected
和MouseOverSelected
。
您可以嘗試使用此模板來製作自己的視覺狀態:
<Style TargetType="local:DataGridRow">
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:DataGridRow">
<localprimitives:DataGridFrozenGrid Name="Root">
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name="CommonStates">
<vsm:VisualState x:Name="Normal"/>
<vsm:VisualState x:Name="NormalAlternatingRow">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="0"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To=".5"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="NormalSelected">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="MouseOverSelected">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="UnfocusedSelected">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="(Fill).Color" To="#FFE1E7EC"/>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="ValidationStates">
<vsm:VisualState x:Name="Valid"/>
<vsm:VisualState x:Name="Invalid">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimation Storyboard.TargetName="InvalidVisualElement" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<Storyboard x:Key="DetailsVisibleTransition">
<DoubleAnimation Storyboard.TargetName="DetailsPresenter" Storyboard.TargetProperty="ContentHeight" Duration="00:00:0.1" />
</Storyboard>
</Grid.Resources>
<Rectangle x:Name="BackgroundRectangle" Grid.RowSpan="2" Grid.ColumnSpan="2" Opacity="0" Fill="#FFBADDE9"/>
<Rectangle x:Name="InvalidVisualElement" Grid.RowSpan="2" Grid.ColumnSpan="2" Opacity="0" Fill="#FFF7D8DB"/>
<localprimitives:DataGridRowHeader Grid.RowSpan="3" Name="RowHeader" localprimitives:DataGridFrozenGrid.IsFrozen="True" />
<localprimitives:DataGridCellsPresenter Grid.Column="1" Name="CellsPresenter" localprimitives:DataGridFrozenGrid.IsFrozen="True" />
<localprimitives:DataGridDetailsPresenter Grid.Row="1" Grid.Column="1" Name="DetailsPresenter" />
<Rectangle Grid.Row="2" Grid.Column="1" Name="BottomGridLine" HorizontalAlignment="Stretch" Height="1" />
</localprimitives:DataGridFrozenGrid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
這是一個很好的MSDN Article一個複製粘貼上定製DataGrid的樣式。例如,您可以修改模板的UnfocusedSelected
部分,並查看是否有任何更改,例如在其周圍添加紅色邊框等。
也許值得一試。我希望你知道如何運用自己的風格。如果不是,這裏是另一個MSDN Resource。
我知道,這些只是提示,但最後可能會有所幫助。
您需要在ViewModel上實現INotifyPropertyChanged
接口,並且其SelectedItem
屬性在其值發生更改時調用PropertyChanged
事件。
我有INotifyPropertyChanged並設置已調用PropertyChanged事件的屬性的值。 – 2009-12-10 12:52:17