2013-04-11 18 views
14

如何從ButtonWPF發送多個參數?我能夠正確地發送值爲TextBox的單個參數。這是代碼。多個命令參數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

如果您描述了您想要的確切參數,它們的類型以及原因,我們可能會提供幫助。命令參數只有一個「綁定」,但根據您的需要還有其他選項,請更多信息。 – 2013-04-11 15:30:25

+0

例如,您可以使用對象[](對象數組)對一個參數進行多個參數轉換,但您需要將所有這些參數向後轉換。或者有問題嗎? – Master117 2013-04-11 15:38:48

+0

嗨J國王,它會另一個控制。一個文本框可以是很好的假設。 – 2013-04-11 16:19:24

回答

14

如何從按鈕在WPF發送多個參數。

您只能發送一個參數作爲CommandParameter

更好的解決方案通常是將TextBox和其他控件綁定到ViewModel中的多個屬性。然後該命令可以訪問所有這些屬性(因爲它們在同一個類中),根本不需要命令參數。

24

除了使用在你的類中定義屬性的方法(讓我們把它稱爲你的ViewModel)綁定到你的視圖之外,有些時候(不常見)我們不想這樣做,一個重要的要了解這些情況的工具是MultiBinding,爲了完整起見,即使您對第一個選項滿意,我會介紹另一種方法。

所以回答你的問題:

1 MVVM方法:

使用MVVM方法,並定義屬性由你的看法綁定,並使用您的視圖模型的命令這些屬性,而不需要CommandParameters。

2. MultiBinding:(可與MVVM方式快樂地生活)

將命令傳遞參數作爲多綁定參數,如下所示:

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

有了您的轉換器使用的定義IMultiValueConverter接口:

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

和用於提取值: 只需將您的命令中的參數指定爲Object[],並按與MultiBinding中相同的順序使用參數。

+2

您的轉換器返回適當的值,但在附加到relay命令的方法中返回一個數組,但數組元素爲null。 – 2014-03-06 03:28:05

+0

您是否正確定義了靜態資源?請參閱:http://msdn.microsoft.com/en-us/library/windows/apps/hh758287.aspx 有關更多信息,請關注stackpanel示例,您可以在其中看到如何定義靜態資源。 – 2014-03-06 08:35:29

+0

我面臨同樣的問題,除了值爲空,一切都很完美。 – Amit 2014-10-05 14:10:08