Prima di tutto, è importante distinguere tra l'osservazione dalla testa leggera "Ne ho bisogno ovunque nel mio progetto" e "Ne ho bisogno in tutte le classi X del mio progetto", perché la prima porta a getter e singleton statici, e quest'ultimo alla corretta iniezione di dipendenza.
Ovviamente i singleton sono un'opzione, ma dal momento che creano praticamente variabili globali, preferirai preferire dipendenze atomiche esplicite.
Quindi non vuoi legare tutto il tuo progetto a una proprietà (anche se attualmente sembra una buona scelta). Vuoi accoppiare solo ciò che richiede l'accoppiamento, per definizione.
Nel tuo caso, ti suggerisco di creare una classe ColorSelection
e una classe Toolbox
(o qualcosa del genere) che passa il ColorSelection
corrente a uno strumento appena selezionato. In altre parole, lo strumento Click
handler (nella casella degli strumenti) imposterà la proprietà SelectedColor
dello strumento sull'istanza definita (e associata) dalla casella degli strumenti.
Nel codice (molto impreciso, ma così ottieni il punto):
class ToolBox {
ColorSelection SelectedColors {get; set;} // This could be bound to the view
Tool Pen {get; set;}
public event ToolEventHandler ToolSelected; // handled by the method below
void ToolSelectedHandler(object sender, ToolEventArgs e) {
e.Tool.SelectedColors = SelectedColors;
}