WPF: associazione in XAML a un object creato nel codice sottostante

È ansible utilizzare un object creato nel codice (ad es. C #) per l’associazione in XAML?

Per esempio:

public class MyForm { private MyComplexObject complexObject; public MyForm() { InitializeComponent(); } public OnButtonClick(object sender, RoutedEventArgs e) { complexObject = new MyComplexObject(); } } 

complexObject non viene creato fino a quando non si fa clic su un pulsante. Ma una volta cliccato quel pulsante mi piacerebbe avere una casella di testo associata a complexObject.ID inizia a mostrare l’Id.

Mi piacerebbe farlo nello XAML se è ansible.

Può essere fatto? Se é cosi, come?

Una possibilità potrebbe essere quella di avere il tuo XAML associato a una proprietà sul tuo codice. Il getter per quella proprietà restituirebbe complexObject.ID, if complexObject! = Null. Altrimenti restituisce qualcosa di “predefinito”, sia esso nullo o 0 o predefinito ( tipo ID ). Allo stesso modo, il setter per quella proprietà assegnerebbe valore a complexObject.ID se complexObject è, di nuovo, non nullo.

 public int ID { get { if (complexObject != null) return complexObject.ID; return 0; // or null or some appropriate default } set { if (complexObject != null) complexObject.ID = value; } } 

Sì, questo può essere fatto, vincolante per una proprietà che si aggiorna con il valore desiderato. Ti suggerirei di esaminare il pattern MVVM (Model-View-ViewModel), che è davvero utile per strutturare questo funzionamento con WPF. Guarda questo video per una bella panoramica: video MVVM

Usando MMVM crei una class che sarebbe la class ViewModel. Questo in genere dovrebbe essere impostato sul DataContext della vista. Dopo averlo fatto, è ansible aggiungere riferimenti dinamici alle altre proprietà della class, ad esempio vincolare il campo di testo a una proprietà contenente l’id og ComplexObject. Se la tua class ViewModel aveva una proprietà ComplexObject, che aveva ancora un ID di proprietà, dovresti semplicemente legarti all’object in questo modo:

  

Avendo questo è ansible triggersre la creazione di ComplexObject dal clic del mouse, che si dovrebbe idealmente impostare come bind del comando. Si noti inoltre che la class ViewModel (o chiunque sia in possesso di ComplexObject deve notificare alla View quando l’object è stato impostato. Può essere fatto rendendo ComplexObject una DependencyProperty o facendo in modo che la class con la proprietà implementa l’interfaccia INotifyPropertyChanged – dando è la funzione PropertyChanged per triggersre l’evento modificato. Preferisco quest’ultimo.