2011-09-02 53 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