2013-04-11 9 views
14

Come posso inviare più parametri da Button a WPF? Sono in grado di inviare un singolo parametro che è il valore di TextBox correttamente. Ecco il codice.Parametri comando multiplo oggetto pulsante wpf

XAML

<TextBox Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="133,22,0,0"  Name="textBox1" VerticalAlignment="Top" Width="120" /> 
<Button Content="Button" Grid.Row="1" Height="23" Command="{Binding Path=CommandClick}" CommandParameter="{Binding Text,ElementName=textBox1}" HorizontalAlignment="Left" Margin="133,62,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> 

Code behind

public ICommand CommandClick { get; set; } 

this.CommandClick = new DelegateCommand<object>(AddAccount); 

private void AddAccount(object obj) 
{ 
    //custom logic 
} 
+0

se si descrivono i parametri esatti che si desidera, i loro tipi e perché, potremmo essere in grado di aiutare. C'è solo un "binding" per un parametro di comando, ma ci sono altre opzioni a seconda di ciò che ti serve, quindi maggiori informazioni per favore. –

+0

Puoi trasformare molti parametri in uno solo, ad esempio usando un oggetto [] (array di oggetti), ma poi devi lanciare tutti questi parametri aftwerwards. O c'è un problema con quello? – Master117

+0

hi J King, sarebbe un altro controllo. una casella di testo può essere una buona ipotesi. –

risposta

14

Come posso inviare più parametri da tasto in WPF.

È possibile inviare un solo parametro come CommandParameter.

Una soluzione migliore è tipicamente quella di collegare solo lo e altri controlli a più proprietà nel ViewModel. Il comando avrebbe quindi accesso a tutte quelle proprietà (dato che si trova nella stessa classe), senza alcun bisogno di un parametro di comando.

24

Oltre a utilizzare l'approccio di definizione delle proprietà nella classe (chiamiamolo ViewModel) per essere vincolati dalla vista, ci sono dei momenti (non comuni) in cui non vogliamo farlo, un importante lo strumento per sapere in queste situazioni è il MultiBinding, quindi, solo per completezza, anche se sei soddisfatto della prima opzione, tratterò un altro approccio.

modo per rispondere alla tua domanda:

1. MVVM Approccio:

utilizzare l'approccio MVVM e definire oggetti da binded dalla vostra vista, e utilizzare tali immobili a comandare il vostro di ViewModel senza la necessità di CommandParameters.

2. MultiBinding:(può vivere felicemente con approccio MVVM)

passando il parametro di comando come parametro Multi rilegata come si vede qui:

<Button Content="MultiBindingExample" Command="{Binding MyCommand}"> 
    <Button.CommandParameter> 
     <MultiBinding Converter="{StaticResource MyMultiConverter}"> 
      <Binding Path="..." ElementName="MyTextBox"/> 
      <Binding Path="..." ElementName="MySomethingElse"/> 
     </MultiBinding> 
    </Button.CommandParameter> 
</Button> 

Con il convertitore definita utilizzando la IMultiValueConverter Interfaccia:

public class MyMultiConverter: IMultiValueConverter 
{ 
    public object Convert(object[] values, ...) 
    { 
     return values.Clone(); 
    } 
} 

e per estrarre i valori: Basta fare riferimento al parametro nel comando come Object[] e utilizzare i parametri nello stesso ordine del MultiBinding.

+2

il convertitore restituisce valori corretti, ma nel metodo collegato al comando relay restituisce un array, ma gli elementi dell'array sono nulli. –

+0

Hai definito correttamente la risorsa statica? vedere: http://msdn.microsoft.com/en-us/library/windows/apps/hh758287.aspx per ulteriori informazioni, concentrarsi sull'esempio dello stackpanel, in cui è possibile vedere come definire una risorsa statica. –

+0

Sto affrontando lo stesso problema, tutto è perfetto tranne i valori sono nulli. – Amit