我有一个带有命令绑定(bind)和使用 Prism 库的文本 block 。
这是 XAML 部分:
<TextBlock Margin="0,10,0,0">SocialSecurityNumer:</TextBlock>
<TextBox Name="SSNText" GotFocus="TextBox_GotFocus" Text="{Binding SSN, UpdateSourceTrigger=PropertyChanged}" Margin="0,3,0,0"/>
这是背后的 ViewModel:
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();
}
}
这是 GridViewModel,用于监听此事件触发器并启动以 SSN 作为参数的函数
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);
}
}
如何添加另一个参数,例如 datetime 参数,让我感到困惑的部分是:
FindCommand = new DelegateCommand(
() => eventAggregator.GetEvent<SSNChangedEvent>().Publish(SSN),
() => !string.IsNullOrWhiteSpace(Kennitala)
);
这个发布函数只需要一个参数,因此我不知道如何轻松添加多个参数。??
最佳答案
您应该创建一个类,其中包含您要发布的所有必要参数。
public class SSNChangedEventParams
{
public string SSN{get;set;}
public DateTime Dt{get;set;}
...
}
然后发布这个类的一个实例:
eventAggregator.GetEvent<SSNChangedEvent>().Publish(new SSNChangedEventParams(){SSN=SSN, Dt = DateTime.Now})
关于c# - 命令绑定(bind)的多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7284968/