2013-04-11 26 views
14

Jak mogę wysłać wiele parametrów z Button w WPF? Jestem w stanie wysłać poprawnie pojedynczy parametr o wartości TextBox. Oto kod.Wiele parametrów polecenia Obiekt przycisku 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

jeśli opisujesz, jakie dokładnie parametry chcesz, ich typy i dlaczego, możemy Ci pomóc. Istnieje tylko jedno "powiązanie" dla parametru polecenia, ale są też inne opcje w zależności od potrzeb, więc proszę o więcej informacji. –

+0

Możesz zmienić wiele parametrów w jednym, używając obiektu [] (array obiektów) na przykład, ale musisz rzucić wszystkie te parametry. Czy jest z tym jakiś problem? – Master117

+0

hi J King, to kolejna kontrola. pole tekstowe może być dobrym założeniem. –

Odpowiedz

14

Jak mogę wysłać wiele parametrów z przycisku w WPF.

Możesz wysłać tylko jeden parametr jako CommandParameter.

Lepszym rozwiązaniem jest zwykle wiązanie TextBox i innych elementów sterujących z wieloma właściwościami w ViewModel. Komenda miałaby wówczas dostęp do wszystkich tych właściwości (ponieważ znajduje się w tej samej klasie), bez potrzeby wprowadzania żadnego parametru polecenia.

24

Inny niż przy zastosowaniu metody określania właściwości w was klasą (nazwijmy to Twój ViewModel) do zbindowanych przez Państwa zdaniem, istnieją razy (nie często), gdzie nie wan't zrobić, ważnym narzędziem do poznania w takich sytuacjach jest MultiBinding, więc tylko dla kompletności, mimo że jesteś zadowolony z pierwszej opcji, omówię inne podejście.

więc odpowiedzieć na pytanie:

1. Podejście MVVM:

stosowanie metody MVVM i określić właściwości zbindowanych przez widoku i użyć tych właściwości w komendzie swojej ViewModel bez konieczności CommandParameters.

2. MultiBinding:(można żyć szczęśliwie z podejściem MVVM)

Przekazywanie parametrów komendy jako parametr Wielu zbindowanych jak widać tutaj:

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

Dzięki swojej Converter określona przy użyciu IMultiValueConverter Interfejs:

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

oraz do wyodrębniania wartości: Po prostu odwołaj się do parametru w swoim poleceniu jako Object[] i użyj parametrów w tej samej kolejności, co w MultiBinding.

+2

twój konwerter zwraca odpowiednie wartości, ale w metodzie dołączonej do polecenia relay zwraca tablicę, ale elementy tablicy są puste. –

+0

Czy poprawnie zdefiniowałeś zasoby statyczne? Więcej informacji można znaleźć na stronie: http://msdn.microsoft.com/en-us/library/windows/apps/hh758287.aspx . Skoncentruj się na przykładzie stackpanel, w którym można zobaczyć, jak zdefiniować zasoby statyczne. –

+0

Mam do czynienia z tym samym problemem, wszystko jest idealne, z wyjątkiem wartości są zerowe. – Amit