L'utilisation des styles dans un modèle de données

J'ai une classe appelée point, et il contient deux propriétés. Je vais les afficher sur l'écran des boutons avec un style. Cette question se rapporte à la façon dont je peux style le bouton de fonction sur le IsSelected valeur, lorsque l'élément que je veux affecter est dans le style de ne pas le modèle de données. J'ai déjà essayé avec un Déclencheur, mais ne parviennent pas à le faire fonctionner.

La classe est ci-dessous.

public class Item : ObservableObject
{
    private string _title;
    private bool _isSelected;

    public string Title
    {
        get { return _title; }
        set
        {
            _title = value;
            RaisePropertyChanged("Title");
        }
    }

    public bool IsSelected
    {
        get { return _isSelected; }
        set
        {
            _isSelected = value;
            RaisePropertyChanged("IsSelected");
        }
    }
}

- Je utiliser un modèle de données de l'affichage de ces éléments dans un ItemsControls.

<ItemsControl ItemsSource="{Binding Path=Items}" ItemTemplate="{StaticResource ResourceKey=ItemTemplate}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>

Suivant le style et le modèle de données.

<Style x:Key="ItemButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Name="ButtonBorder" BorderThickness="2,2,2,0" BorderBrush="#AAAAAA"  CornerRadius="6,6,0,0"  Margin="2,20,0,0" Background="Black">
                    <ContentPresenter
                            VerticalAlignment="Center"  
                            HorizontalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<DataTemplate x:Key="ItemTemplate">
    <Button Height="60" Style="{StaticResource ItemButton}" Name="Button">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Path=Title}" 
                       HorizontalAlignment="Left" Margin="5,5,5,3" FontSize="25" Foreground="#6B6B6B" FontFamily="Arial" />
                <Button Style="{StaticResource NoChromeButton}" Margin="0,0,5,0">
                <Button.Content>
                    <Image Height="20" Source="/WpfApplication1;component/Image/dialogCloseButton.png"></Image>
                </Button.Content>
                <Button.ToolTip>
                    Close    
                </Button.ToolTip>
            </Button>
        </StackPanel>
    </Button>
</DataTemplate>

J'ai besoin de changer l'arrière-plan de "ButtonBorder" du Noir au Blanc lorsque IsSelected est Vrai, sur l'Élément objet.

J'ai ajouté dans un Déclencheur dans le Modèle de Données

Cela ne fonctionne pas, je suppose que c'est parce que le modèle remplace le DataTemplate, donc le fond reste blanc. Pourtant, quand j'essaie de faire un déclencheur dans le style, je ne peux pas accéder à la propriété IsSelected?

DataTemplate Déclencher

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding IsSelected}" Value="True">
            <Setter TargetName="Button" Property="Background" Value="White"/>
        </DataTrigger>
    </DataTemplate.Triggers>

Style de déclenchement

    <Style.Triggers>
        <DataTrigger Binding="{Binding IsSelected}" Value="True">
            <Setter Property="Background" Value="White"/>
        </DataTrigger>
    </Style.Triggers>

Suis-je raté quelque chose?

Si ItemButton est utilisé uniquement pour le Item objet, alors pourquoi ne pas vous venez de consolider le Style dans le Item's DataTemplate?
Ses un commentaire juste, j'ai pris l'habitude de séparer tout ce que les ressources individuelles, ne sais pas si c'est une bonne habitude, mais celui que j'ai collé 🙂
Il rend également les Ressources de l'INTERFACE et de mise en page facile à lire et les modifier si elles ne sont pas encombrées en ligne de Modèles et de Styles.
J'ai l'habitude de simplement Ctrl M,L pour "désencombrer".

OriginalL'auteur JonWillis | 2011-11-17