Ho un controlloWPF - Binding ObservableCollection proprietà di dipendenza all'interno di un UserControl
classe DragGrid: Griglia { ...}
che eredita dalla rete originale e permette il trascinamento e ridimensionando i suoi elementi figli. ho bisogno di impegnare un costume DP nome WorkItemsProperty
ad una collezione di tipo osservabile WorkItem
(attrezzi INotifyPropertyChanged
). Ogni elemento nella griglia è associato a un elemento di raccolta.
Ogni volta che l'utente aggiunge un nuovo elemento dinamicamente in fase di esecuzione (gli elementi non possono essere dichiarati in XAML!) O elimina un elemento da quella raccolta, il WorkItems
DP su DragGrid deve essere aggiornato ei bambini nella griglia (dove ogni bambino rappresenta un elemento di raccolta WorkItem
).
mia domanda è come fa il DP notificare il controllo su quale elemento figlio nella griglia deve essere rimosso, cambiato ('cambiamento' significa utente ha trascinato un elemento, o ridimensionato con il mouse) o aggiunto e come dovrei identificare quale dei bambini esistenti è quello che deve essere cancellato o modificato. Capisco che è qui che entra in gioco DependencyPropertyChangedCallback. Ma questo viene chiamato solo quando la proprietà DP viene reimpostata, non quando qualcosa all'interno della collezione cambia (come aggiungi, rimuovi elemento). Quindi, alla fine, il controllo DragGrid
ha in qualche modo bisogno di iscriversi all'evento CollectionChanged? A che punto collegheremo il gestore di eventi per quello?
* EDIT :: La ragione per usare una griglia, in primo luogo è perché voglio essere in grado di mantenere un delta minimo per quando l'utente trascina o ridimensiona il controllo nella griglia. Un controllo rappresenta un intervallo di tempo e ogni colonna della griglia rappresenta 15 minuti (che è il valore minimo). Fare questo in una tela con i pollici era difficile e bug. L'implementazione di un DragGrid ha risolto i problemi di interazione dell'utente. Inoltre, una tela non è scalabile, quindi gli intervalli temporali dovrebbero essere ricalcolati continuamente. Con la griglia, non ho il problema perché le colonne mi dicono l'ora indipendentemente dalle dimensioni. **
Josh, grazie per questo. Nell'evento collectionchanged, non posso aggiungere alla raccolta interna di workitems, perché .NET non lo consente. Penso che quello che intendevi qui è aggiungere i controlli alla collezione Bambini della griglia. – John
No, in realtà intendevo aggiungerlo alla TUA collezione + alla collezione Children della griglia o ecc. Non sono sicuro di come funzioni il tuo controllo, ma è ovvio che stai facendo del lavoro per gestire alcuni gruppi di elementi. In base al tuo commento, sembra che tu stia gestendo la raccolta Grid.Children, quindi sì, aggiungila lì. –
Idealmente si dovrebbe prendere un ItemsControl (o eventualmente una classe figlio personalizzata da esso, non sicuro senza una migliore comprensione del problema) e si dovrebbero impostare i WorkItem come figli di ItemsControl. Si utilizzerà quindi un ItemsPanelTemplate per visualizzare gli elementi su una griglia. Si utilizzerà un DataTemplate per generare le immagini effettive per gli elementi di lavoro. DataBinding sul controllo del modello dell'articolo, il controllo del contenitore (generato da ItemsControl) e la griglia consentirebbero di disegnare gli elementi nelle loro posizioni corrette. –