J'ai une propriété 'current' externe (int) qui représente l'index actuel d'une collection. J'ai un listview qui affiche cette collection. Je veux pouvoir styliser le 'nième' item de la collection en fonction de la valeur de 'current', c'est-à-dire si current est 3, mettre en surbrillance le 4ème item de la collection (index = 3), etc. ? Une alternative consisterait à lier lorsque le texte de l'élément est égal à une autre propriété externe.style nième article dans listview?
1
A
Répondre
0
Pour personnaliser le style d'un ListView, vous pouvez créer un DataTrigger qui se lie à une propriété du DataContext de View pour modifier le style actuel. Dans cet exemple, le code modifie l'arrière-plan.
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Background" Value="Aqua"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.StyleType, RelativeSource={RelativeSource Self}}" Value="1">
<Setter Property="Background" Value="Chartreuse"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
J'ai ajouté la plupart du code ici afin que vous puissiez obtenir le tableau complet que possible de ce qui se passe, mais je sautais les classes de base MVVM commune.
Comment ça marche:
- ListView ItemsSource se fixe aux clients
- ListView SelectedItem se fixe au client
- ListView.ItemContainerStyle a une DataTrigger qui se lie à DataContext.StyleType
- DataContext est une liste de Objets client avec une propriété StyleType définie par l'utilisateur qui est initialisée dans le code-behind
- Une commande de bouton efface la valeur de StyleType
- cliquant sur une ligne change le style de la ligne suivante
- implémente Client INotifyPropertyChanged, qui se déclenche lorsque StyleType change
- DataTrigger modifie l'arrière-plan de chaque ListViewItem
Voici le XAML, regardez DataTrigger:
<Window x:Class="ListViewScrollPosition.Views.ScrollBarwindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Style on Model" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListView
Grid.Row="0"
SelectedItem="{Binding Customer}"
ItemsSource="{Binding Customers}" x:Name="myListView">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Background" Value="Aqua"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.StyleType, RelativeSource={RelativeSource Self}}" Value="1">
<Setter Property="Background" Value="Pink"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="First Name"
DisplayMemberBinding="{Binding FirstName}" />
<GridViewColumn Header="Last Name"
DisplayMemberBinding="{Binding LastName}" />
<GridViewColumn Header="Style Type"
DisplayMemberBinding="{Binding StyleType}" />
</GridView>
</ListView.View>
</ListView>
<Button Grid.Row="1" Content="Change Style" Command="{Binding Path=AlterStyle}"/>
</Grid>
</Window>
Voici ViewModel la vue utilise pour obtenir des clients et de modifier la valeur de StyleType:
using System.Collections.Generic;
using System.Windows.Input;
using ListViewScrollPosition.Commands;
using ListViewScrollPosition.Models;
namespace ListViewScrollPosition.ViewModels
{
public class MainViewModel : ViewModelBase
{
private DelegateCommand _alterStyleCommand;
public MainViewModel()
{
}
public ICommand AlterStyle
{
get
{
if (_alterStyleCommand == null)
{
_alterStyleCommand = new DelegateCommand(AlterStyleCommand);
}
return _alterStyleCommand;
}
}
private void AlterStyleCommand()
{
foreach (var customer in Customers)
{
customer.StyleType = 0;
}
}
private void ApplyStyleToNextRow(Customer currentCustomer)
{
bool setNext = false;
foreach (var customer in Customers)
{
if (setNext)
{
customer.StyleType = 1;
setNext = false;
}
else
{
customer.StyleType = 0;
}
if (currentCustomer == customer)
{
setNext = true;
}
}
}
private List<Customer> _customers = Customer.GetSampleCustomerList();
public List<Customer> Customers
{
get
{
return _customers;
}
}
private Customer _customer = null;
public Customer Customer
{
get
{
return _customer;
}
set
{
_customer = value;
ApplyStyleToNextRow(_customer);
OnPropertyChanged("Customer");
}
}
}
}
Voici le modèle, ViewModelBase implémente INotifyPropertyChanged, les feux de StyleType OnPropertyChanged lorsque changé, ce qui met à jour chaque ListViewItem:
using System;
using System.Collections.Generic;
namespace ListViewScrollPosition.Models
{
public class Customer : ViewModels.ViewModelBase
{
public String FirstName { get; set; }
public String LastName { get; set; }
private int _style;
public int StyleType
{
get { return _style;}
set
{
_style = value;
OnPropertyChanged("StyleType");
}
}
public Customer(String firstName, String lastName, int styleType)
{
this.FirstName = firstName;
this.LastName = lastName;
this.StyleType = styleType;
}
public static List<Customer> GetSampleCustomerList()
{
return new List<Customer>(new Customer[4] {
new Customer("A.", "Zero", 0),
new Customer("B.", "One", 1),
new Customer("C.", "Two", 2),
new Customer("D.", "Three", 1)
});
}
}
}
Voici le code-behind où je configurer le DataContext:
using System.Windows;
namespace ListViewScrollPosition.Views
{
public partial class ScrollBarwindow : Window
{
public ScrollBarwindow()
{
InitializeComponent();
DataContext = new ViewModels.MainViewModel();
}
}
}
Questions connexes
- 1. Comment Style le premier article dans ma Listview différemment
- 2. Aucun article dans ListView
- 3. En surbrillance Article Dans ListView
- 4. WPF ListView MouseOver Article
- 5. ListView article animation spécifique
- 6. Modifier un Article ListView
- 7. Jquery légende style article
- 8. ActionBar ActionView style article
- 9. Wicket: ListView - sauter un article
- 10. Comment obtenir ListView article Id
- 11. android listview style d'article?
- 12. Impossible de supprimer Listview article
- 13. C# ListView article sélection question
- 14. style la nième lettre dans une période à l'aide CSS
- 15. Style ListView Chaque ligne
- 16. JavaFX - style CSS listview
- 17. Comment obtenir un Article de ListView?
- 18. Android ListView avec 2 TextViews par article
- 19. style listView Android
- 20. Android ListView article question de la sélection
- 21. Android Listview et Focus article par TrackBall
- 22. Android: fond ListView pour chaque rangée article
- 23. Aucun article n'est affiché en ListView
- 24. android listview différentes vues pour chaque article
- 25. ListView montre SEULEMENT un ImageView par article
- 26. ListView + simple textview dans chaque article = collecte des ordures excessive
- 27. Article cliquable avec des URL cliquables dans ListView
- 28. comment générer des données dynamiques pour un article dans listview
- 29. Style du rendez-vous/article sélectionné dans un RadScheduler Telerik
- 30. WPF - Style de sélection ListView
Merci, mais je ne vois pas de réponse à ma question dans ce code. Comment le 3ème élément est-il surligné lorsque Count == 2, et le 4ème élément est surligné quand Count == 3, etc? Je préfère également ne pas modifier mon modèle spécifiquement à des fins de style. – DaveO
Le but de ma réponse était de montrer que vous pouvez utiliser les données liées dans la grille pour contrôler l'affichage. La façon dont vous appliquez cette information peut être potentiellement difficile étant donné que l'utilisateur peut trier les données dans la vue par exemple. J'ai modifié ma réponse pour changer le style de la rangée suivante en fonction de la ligne actuellement sélectionnée, mais j'ajouterai que je n'ai pas résolu le problème du tri. Si vous trouvez un moyen meilleur, veuillez poster votre solution et je voterai pour cela. – Zamboni