2011-09-02 79 views
3

我有一個帶有命令綁定並使用Prism庫的文本塊。使用命令綁定的多個參數

這是XAML PARTH:

<TextBlock Margin="0,10,0,0">SocialSecurityNumer:</TextBlock> 
<TextBox Name="SSNText" GotFocus="TextBox_GotFocus" Text="{Binding SSN, UpdateSourceTrigger=PropertyChanged}" Margin="0,3,0,0"/> 

這是視圖模型背後:

public FindViewModel() 
{ 
    var eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>(); 

    FindCommand = new DelegateCommand(
     () => eventAggregator.GetEvent<SSNChangedEvent>().Publish(SSN), 
     () => !string.IsNullOrWhiteSpace(Kennitala) 
     ); 
} 

public DelegateCommand FindCommand { get; set; } 

private string ssn; 
public string SSN 
{ 
    get { return ssn; } 
    set 
    { 
     if (ssn== value) 
      return; 

     ssn = value; 
     RaisePropertyChanged(() => SSN); 
     FindCommand.RaiseCanExecuteChanged(); 
    } 
} 

這是偵聽此事件觸發和火起來與SSN一個函數作爲GridViewModel參數

public class GridViewModel : NotificationObject 
{ 
    public GridViewModel() 
    { 
     var eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>(); 
     eventAggregator.GetEvent<SSNChangedEvent>().Subscribe(GetData); 
    } 

    public ObservableCollection<Investment> Investments { get; set; } 

    private void GetData(string ssn) 
    { 
     var list = GeniusConnection.GetDataFromWebService(ssn); 

     Investments = new ObservableCollection<Investment>(list); 

     RaisePropertyChanged(() => Investment); 
    } 
} 

我如何可以添加其他參數,例如日期時間參數,這讓我困惑的部分是:

FindCommand = new DelegateCommand(
      () => eventAggregator.GetEvent<SSNChangedEvent>().Publish(SSN), 
      () => !string.IsNullOrWhiteSpace(Kennitala) 
      ); 

此發佈功能,只需要一個參數,爲此我不知道怎樣才能輕鬆地添加多個paramters ??。

+0

請閱讀[編輯幫助(http://stackoverflow.com/editing-help),並確保正確地格式化代碼下一次。 –

+0

格式化有問題嗎? – aghaux

+0

好了,不一樣了,但有... –

回答

5

你應該創建包含要發佈所有neccessary參數的類。

public class SSNChangedEventParams 
{ 
    public string SSN{get;set;} 
    public DateTime Dt{get;set;} 
    ... 
} 

,然後發佈這個類的一個實例:

eventAggregator.GetEvent<SSNChangedEvent>().Publish(new SSNChangedEventParams(){SSN=SSN, Dt = DateTime.Now}) 
+1

@agh你的參數可以是任何你想要的,所以在這種回答表明,讓有需要的參數一個容器類,並通過它在構造函數中。有幾次,我已經儘可能在命令參數中傳遞整個ViewModel! – EtherDragon

+0

嗨,只是快速的問題。來自參數DT的值始終是Date = {1.1.0001 00:00:00},但我在日期選擇器中選擇另一個日期 – aghaux

+0

@agh:這是DateTime的默認值,如果您發佈了另一個問題有問題。 – thumbmunkeys