Nella mia vista, ho un pulsante.Come passare le informazioni da Visualizza a ViewModel con DelegateCommand?
Quando l'utente fa clic su questo pulsante, voglio che ViewModel salvi il contesto di TextBlock nel database.
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top">
<TextBlock Text="{Binding FirstName}"/>
<TextBox Text="Save this text to the database."/>
<Button Content="Save" Command="{Binding SaveCommand}"/>
</StackPanel>
Tuttavia, a mio DelegateCommand nel mio ViewModel, il "Save()" il metodo non passa alcun argomento, così come faccio ad ottenere i dati dal punto di vista in quel punto?
#region DelegateCommand: Save
private DelegateCommand saveCommand;
public ICommand SaveCommand
{
get
{
if (saveCommand == null)
{
saveCommand = new DelegateCommand(Save, CanSave);
}
return saveCommand;
}
}
private void Save()
{
TextBox textBox = ......how do I get the value of the view's textbox from here?....
}
private bool CanSave()
{
return true;
}
#endregion
In realtà ho risolto il problema collegando TextBox a una proprietà ViewModel (INotifyPropertyChanged), il valore di cui ovviamente il comando Salva() ha accesso, ma i vostri suggerimenti sono molto interessanti, li verificheranno. –
C'è un caso d'uso specifico (e ragionevolmente comune) in cui la soluzione di Matt vince sicuramente per l'accesso a un valore associato separato: comandi eseguiti all'interno di un 'ItemsControl'. Qui, un pulsante, ad esempio, in un 'ListView' può usare il suo' DataContext' come parametro e l'elemento su cui è stato fatto clic sul pulsante viene passato insieme al comando. È difficile capire a quale dei molti elementi è stato fatto clic sul pulsante in caso contrario. –
Si noti che il generico 'DelegateCommand' ha una restrizione importante (che non viene rilevata fino al runtime - il compilatore non si lamenterà): non è possibile utilizzare un tipo di valore come parametro. Il consiglio ufficiale è di usare un tipo di valore nullable (che è permesso) e controllare prima dell'uso che contenga un valore (https://msdn.microsoft.com/en-us/library/gg431410%28v=pandp.50%29 .aspx - vedere la sezione "Osservazioni"). –