2017-10-12 4 views
-1

Je veux définir le style à partir de code derrière pour GridView de ListView. Puisque c'est la propriété de dépendance , je voudrais surveiller quand il est changé.Moniteur pour ListView.Voir les modifications

Essayer d'ajouter propriété de dépendance a changé le rappel de this answer:

var handler = new DependencyPropertyChangedEventHandler(Handler); 
DependencyPropertyDescriptor.FromProperty(ListView.ViewProperty, 
    typeof(ListView)).AddValueChanged(listView, handler); 

où gestionnaire est

void Handler(object sender, DependencyPropertyChangedEventArgs e) { ... } 

provoquera une erreur du compilateur:

Error CS1503 Argument 2: cannot convert from 'System.Windows.DependencyPropertyChangedEventHandler' to 'System.EventHandler'

essayant de jeter (EventHandler)handler toujours garder compilateur plaindre:

Error CS0030 Cannot convert type 'System.Windows.DependencyPropertyChangedEventHandler' to 'System.EventHandler'


Si je tente d'utiliser gestionnaire d'événements standard:

var handler = new EventHandler(Handler); 

void Handler(object sender, EventArgs e) { ... } 

rend compilable, mais il se bloque lors de l'exécution avec

An unhandled exception of type 'System.ArgumentException' occurred in PresentationFramework.dll

Additional information: Handler type is not valid.

Que puis-je faire d'autre AddValueChanged avec callback de propriété de dépendance? Peut-être que l'approche est mauvaise, pourquoi? Sinon, comment puis-je être informé lorsque ListView.View est modifié?

Je ne veux appliquer aucune des solutions de this answer: ne peut pas utiliser de liaison (la valeur sera définie dans xaml) et ne souhaite pas créer MyListView uniquement pour cela.

Répondre

1

Cela fonctionne pour moi:

public MainWindow() 
{ 
    InitializeComponent(); 

    DependencyPropertyDescriptor 
     .FromProperty(ListView.ViewProperty, typeof(ListView)) 
     .AddValueChanged(listView, ViewChanged); 

    listView.View = new GridView(); 
} 

private void ViewChanged(object sender, EventArgs e) 
{ 
    Debug.WriteLine("ViewChanged"); 
} 
+0

Merci pour vérifier, c'était vraiment utile. L'erreur vient en effet d'un autre gestionnaire d'événement (ce qui rend ma question médiocre), mais le titre + la réponse pourrait être utile pour quelqu'un d'autre je suppose. – Sinatr