コードから(ViewModelのバインドされたオブジェクトを介して)データグリッドSelectedItemを更新する場合、新しく選択されたアイテムを強調表示するビジュアルグリッドを取得するにはどうすればよいですか?
ありがとう、
マーク
更新:これはまだ私にとっての問題です。私のSelectedItemプロパティはすでに変更通知を実装していますが、データグリッドは選択された行を視覚的に表示していません。つまり、強調表示されていません。
コードから(ViewModelのバインドされたオブジェクトを介して)データグリッドSelectedItemを更新する場合、新しく選択されたアイテムを強調表示するビジュアルグリッドを取得するにはどうすればよいですか?
ありがとう、
マーク
更新:これはまだ私にとっての問題です。私のSelectedItemプロパティはすでに変更通知を実装していますが、データグリッドは選択された行を視覚的に表示していません。つまり、強調表示されていません。
が変更されたことを本当に確認したと思います(モードを一時的に設定して、逆に機能するかどうかを確認できます。行をクリックすると、ハイライトが表示され、メソッドが実行されます)。はいの場合は、メソッド呼び出しのプロパティ名と完全に一致していることを確認してください。ここではタイプセーフではないため、スペル ミスを犯している可能性があります。いいえの場合は、Databinding 属性が正しく設定されているかどうかを確認してください。もう 1 つの考えは、 のスタイルまたはテンプレートを変更したために、 Visual Statesの一部が失われている可能性があるということです。スタイル テンプレートを使用してスタイルを設定できます。と呼ばれる 3 つの選択された状態があります。SelectedItem
Binding
TwoWay
SelectedItem
set
PropertyChanged
DataGrid
DataGridRow
UnfocusedSelected
(おそらく正しいもの)、NormalSelected
およびMouseOverSelected
。
このテンプレートを使用して、独自の Visual State を作成してみてください。
<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>
これは、DataGrid スタイルのカスタマイズに関する優れたMSDN 記事からのコピー アンド ペーストです。たとえば、UnfocusedSelected
テンプレートの一部を変更して、たとえばその周りに赤い境界線を追加するなどして変更があるかどうかを確認できます。
試してみる価値があるかもしれません。独自のスタイルを適用する方法を知っていることを願っています。そうでない場合は、別のMSDN リソースを参照してください。
これらは単なるヒントですが、最終的には役立つかもしれません。
INotifyPropertyChanged
ViewModel にインターフェイスを実装し、値が変更されたときにそのSelectedItem
プロパティがイベントを呼び出すようにする必要があります。PropertyChanged