databinding una proprietà o proprietà di dipendenza
-
01-07-2019 - |
Domanda
Ho due controlli personalizzati che sono paragonabili a un nodo e il controllo che disegna i collegamenti tra i nodi.
Vorrei avere entrambi i controlli scritti tanto in xaml come possibile.Il link di negozi entrambi i nodi come le proprietà di dipendenza, e io uso il databinding per spostare la linea tra i nodi ogni volta che i nodi si muovono.
Sarebbe bello essere in grado di modificare altri valori della linea, per esempio, la larghezza del tratto, a seconda della distanza tra i due nodi.Così la proprietà necessita di aggiornamento quando un nodo si muove, e non riesco a ottenere la mia testa intorno come che avrebbe funzionato.
Qualcuno ha qualche idea?
Soluzione
si può provare a fare qualcosa di simile:
- come nel post precedente, definire una larghezza tratto (qualunque cosa avete bisogno) di proprietà del collegamento, classe
- definire multibinding applicato alla proprietà, al passaggio delle due nodi per l'associazione dovrebbe apparire come:
<Multibinding Converter="{StaticResource converter}">
<Binding Path="Node1" RelativeSource|Source...="" />
/>
</Multibinding>
Implementare l'interfaccia IMultiValueConverter, che sarà essenzialmente calcolare come la corsa dovrebbe apparire come in base alla distanza tra i nodi.
in xaml creare istanza del convertitore, e aggiungere al vostro multibinding del Convertitore di proprietà.
il vantaggio di questa soluzione è che si dispone di abbastanza chiaro modello di classe e ciascuna classe non semplici compiti.inoltre, più tardi, è possibile configurare il convertitore di classe a sostegno di casi in più senza toccare il nodo di classe, che rimane semplice ed è progettato semplicemente per la visualizzazione di nodi.
in generale, ogni volta che si dispone di una mappa più valori di proprietà di un altro immobile, dovrete usare multibinding e convertitore.
Altri suggerimenti
Si potrebbe definire una proprietà StrokeWidth nel tuo link di classe che viene calcolato ogni volta che i nodi spostare e quindi associare lo stile appropriato proprietà.
Suppongo che si potrebbe anche provare a fare qualcosa con Datatrigger, ma hanno bisogno di valori specifici per lavorare - non è possibile utilizzare qualsiasi tipo di espressioni.Questo rende difficile avere la soluzione adatta bene ad un'ampia gamma di distanze tra i nodi.