Ho una proprietà che è un tipo di dati di database (char, datetime, int, float ecc ...) e voglio cambiare il controllo usato per inserire un valore del tipo selezionato. Quindi per i valori di testo voglio un TextBox
e per i valori di data voglio un DatePicker
.Visualizza dinamicamente un controllo in base alla proprietà associata usando WPF
Un modo in cui ho pensato di farlo era quello di avere uno di ciascun controllo sul mio modulo e impostare il loro Visibility
utilizzando un'implementazione IValueConverter
appropriata. So che funzionerà, ma creerebbe molto codice e non mi sembra molto bello.
L'altro modo che ho pensato è stato quello di utilizzare un ContentPresenter
e impostare il suo contenuto con un Style
e DataTriggers
ma non riesco a farlo funzionare.
<Style x:Key="TypedValueHelper" TargetType="{x:Type ContentPresenter}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DataType}" Value="Char">
<Setter Property="Content" Value="???"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=DataType}" Value="Date">
<Setter Property="Content" Value="???"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=DataType}" Value="Integer">
<Setter Property="Content" Value="???"/>
</DataTrigger>
</Style.Triggers>
</Style>
Se qualcuno può compilare il mio "???" o offrire una soluzione migliore, per favore.
Puoi condividere il tuo codice nella fase attuale? – ThomasAndersson
Non sono sicuro di poter condividere il mio codice perché ci sono molte dipendenze. In effetti, il mio problema reale è un po 'più complicato di quello che ho lasciato intendere. Sono abbastanza sicuro che la soluzione funzionerà per me Ho appena avuto un problema in cui sto cercando di impostare il contenuto di ContentControl su {Binding} piuttosto che su {Binding MyValue}, il che significa che WPF carica la vista per il mio ViewModel nel controllo dei contenuti, e continua a ricorsivamente ... –
Ah, capisco. Hai provato {Binding Path =.}? – ThomasAndersson