2012-02-02 73 views
2

我正在使用MVVM工具包版本1。我有兩個文本框textbox1和textbox2。當按下按鈕時,我需要將這兩個值作爲參數傳遞,並且需要在名爲textbox3的第三個文本框中顯示結果。當此按鈕,用戶點擊,但我的參數變量沒有沒有任何價值如何使用多重綁定將參數傳遞給命令?

類似這樣

public ICommand AddCommand 
    { 
     get 
     { 
      if (addCommand == null) 
      { 
       addCommand = new DelegateCommand<object>(CommandExecute,CanCommandExecute); 
      } 
      return addCommand; 
     } 
    } 

    private void CommandExecute(object parameter) 
    { 
     var values = (object[])parameter; 
     var a= (int)values[0]; 
     var b= (int)values[1]; 
     Calculater calcu = new Calcu(); 
     int c = calcu.sum(a, b);  
    } 

    private bool CanCommandExecute(object parameter) 
    { 
     return true; 
    } 

的commandExecute方法我VM代碼調用。我怎麼能傳遞用戶的值作爲參數?並將結果返回給texbox3?

回答

10

你可以使用多重綁定和轉換器

<Button Content="Add" Command="{Binding AddCommand}" 
<Button.CommandParameter> 
    <MultiBinding Converter="{StaticResource YourConverter}"> 
     <Binding Path="Text" ElementName="txt1"/> 
     <Binding Path="Text" ElementName="txt2"/> 
    </MultiBinding> 
</Button.CommandParameter> 
</Button> 

轉換器

public class YourConverter : IMultiValueConverter 
{ 
public object Convert(object[] values, ...) 
{ 
    //.Net4.0 
    return new Tuple<int, int>((int)values[0], (int)values[1]); 

    //.Net < 4.0 
    //return values.ToArray(); 
} 

... 
} 

命令

private void CommandExecute(object parameter) 
{ 
    var o= (Tuple<int, int>)parameter; 
    var a= o.Item1; 
    var b= o.Item2; 
    Calculater calcu = new Calcu(); 
    int c = calcu.sum(a, b);  
} 

PS:請檢查我的語法 - 它從我的腦海裏寫的...

+0

我遵循相同的方式。我正在使用不支持Tuple的.net framework 3.5。所以我只是將它作爲Object本身返回。但是當代碼到達CommandExecute方法時,參數值爲空。參數如何獲得用文本框分配的值。你的轉換器中的 – niknowj 2012-02-02 07:59:25

+0

只需使用:return values.ToArray(); < - 這應該有所幫助。你必須創建一個「新」數組然後才能工作。返回新的對象{values [0],values [1]};也應該工作。 – blindmeis 2012-02-02 09:02:06

1

您可以在屬性視圖模型的,並將其綁定到你的TextBox是你需要使用INotifyPropertyChanged的通知來改變....

視圖模型

public MyViewModel:INotifyPropertyChanged 
{ 
private string1; 
private string2; 
private string3; 

//Make a similar propety for string2 and string3 
public string String1 
{   
    get   
    {    
     return string1;   
    } 
    set 
    { 
     string1=value; 
     //Implementation of Propertychanged is left upon you 
     InvokePropertyChanged("String1"); 
    }  
}  


public ICommand AddCommand  
{   
    get   
    {    
     if (addCommand == null)    
     {     
      addCommand = new DelegateCommand<object>(CommandExecute,CanCommandExecute);    
     }    
     return addCommand;   
    }  
}  
private void CommandExecute(object parameter)  
{   
    var a= String1;   
    var b= String2;   
    Calculater calcu = new Calcu();   
    String3 = (calcu.sum(a, b)).ToString();   
}  
private bool CanCommandExecute(object parameter)  
{   
    return true;  
} 
} 

的XAML

<TextBox Text={Binding Path=String1}></TextBox> 
<TextBoxText={Binding Path=String2}></TextBox> 
<Button Command={Binding Path=AddCommand}>Add</Button> 
<TextBoxText={Binding Path=String3></TextBox> 
+0

謝謝您的回覆。我的情況我不想綁定文本框的屬性。我想將這些值作爲參數傳遞給附帶按鈕控件的命令。 – niknowj 2012-02-02 08:02:51

相關問題