Domanda

Quando aggiorno un SelectedItem datagrid dal codice (tramite un oggetto associato in un ViewModel), come ho la griglia visiva per evidenziare l'elemento appena selezionata?

Grazie,
Mark

UPDATE: Questo è ancora un problema per me. La mia proprietà SelectedItem implementa già notifica di modifica, ma il datagrid non è VISIVAMENTE che visualizza quale riga è stata selezionata -. Vale a dire che non è sempre evidenziato

È stato utile?

Soluzione

Credo che davvero ha verificato che il SelectedItem è cambiato (è possibile impostare la modalità Binding per TwoWay temporaneamente per vedere se funziona il contrario, facendo clic sulla riga si dovrebbe vedere il punto culminante e SelectedItem-il metodo di set eseguito). Se sì, verificare che davvero corrispondere esattamente al nome proprietà sul metodo PropertyChanged invoke. Dal momento che non stai Typesafe qui, si potrebbe aver fatto un errore di ortografia. Se no, controllare se il vostro attributo Databinding sia impostato correttamente. Un'altra idea è che si potrebbe avere cambiato stili o template del DataGrid e ora si mancano alcune delle stati visivi . Il DataGridRow può essere designato utilizzando un modello di stile. Hai tre stati selezionati, chiamato UnfocusedSelected (probabilmente quella giusta), e NormalSelected MouseOverSelected.

Si potrebbe provare a fare il vostro proprio stato visivo utilizzando questo modello:

<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>

Questo è un copia-incolla da un buon articolo MSDN sulla personalizzazione Stili DataGrid. Si potrebbe, ad esempio, modificare la parte UnfocusedSelected del modello e vedere se si vede alcun cambiamento quando, ad esempio, l'aggiunta di un bordo rosso intorno ad esso o qualcosa del genere.

Forse vale la pena di provare. Spero che si sa come applicare propri stili. Se no, ecco un altro MSDN Resource .

Lo so, questi sono solo suggerimenti, ma forse utile alla fine.

Altri suggerimenti

È necessario implementare l'interfaccia INotifyPropertyChanged sul ViewModel ed avere la sua proprietà SelectedItem richiamare l'evento PropertyChanged quando il suo valore è modifiche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top