C# 通过命令参数wpf mvvm传递参数的日期选择器
我有一个使用C# 通过命令参数wpf mvvm传递参数的日期选择器,c#,wpf,mvvm,prism,C#,Wpf,Mvvm,Prism,我有一个使用Prism的WPF MVVM项目,我有一个Datepicker,它绑定到viewmodel上的Datetime属性。我想使用SelectedDateChanged事件获取更改的值(无代码隐藏)。我知道我在Datepicker也被绑定的属性中得到了值更改,但我想尝试另一种方法。到目前为止,我已经在xaml中组装了datepicker <DatePicker Name="dpName" Grid.Row="1" Grid.Column="4" VerticalAlignment="
Prism
的WPF MVVM项目,我有一个Datepicker
,它绑定到viewmodel上的Datetime
属性。我想使用SelectedDateChanged
事件获取更改的值(无代码隐藏)。我知道我在Datepicker
也被绑定的属性中得到了值更改,但我想尝试另一种方法。到目前为止,我已经在xaml中组装了datepicker
<DatePicker Name="dpName" Grid.Row="1" Grid.Column="4" VerticalAlignment="Center" HorizontalAlignment="Center" Width="200" SelectedDate="{Binding Class.Date}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedDateChanged">
<i:InvokeCommandAction Command="{Binding ath=TestMeCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DatePicker>
在ctor中:
TestDateCommand = new DelegateCommand<object>(TestPateparam);
我的问题是如何将所选日期作为参数传递给函数。到目前为止,我已尝试将InvokeCommandAction
替换为
<i:InvokeCommandAction Command="{Binding Path=TestDateCommand}" CommandParameter="Binding ElementName=DPLoanDetailsAsOfDate, Path=SelectedDate}" />
还有c#函数
public DelegateCommand TestDateCommand{get;set;}
TestDateCommand=新的DelegateCommand(TestPateparam);
私有void TestPateparam(对象dt)
{
int检验=0;
}
如果您使用的是Prism 6.1.1-pre2,则可以通过Prism的InvokeCommandAction轻松完成此操作:
<DatePicker Grid.Row="1" Margin="5" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedDateChanged">
<prism:InvokeCommandAction Command="{Binding SelectedCommand}" TriggerParameterPath="AddedItems" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DatePicker>
您的命令参数绑定缺少前导{字符。不确定这是否是问题所在。如果您使用命令执行验证,则说明您做错了。请使用INotifyDataErrorInfo进行验证。调试器是否转到TestPatParam()
?如果是,请查看dt
有什么功能。您不能使用InvokeCommandAction。请参阅安装程序,Ayyappan Subramanian调试器确实转到TestDateParam,但我没有将日期作为参数获取“Binding ElementName=datePickerName,Path=SelectedDate}”,我在本例中将参数设置为对象而不是日期时间
<i:InvokeCommandAction Command="{Binding Path=TestDateCommand}" CommandParameter="Binding ElementName=DPLoanDetailsAsOfDate, Path=SelectedDate}" />
public DelegateCommand<object> TestDateCommand { get; set; }
TestDateCommand = new DelegateCommand<object>(TestPateparam);
private void TestPateparam(object dt)
{
int test = 0;
}
<DatePicker Grid.Row="1" Margin="5" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedDateChanged">
<prism:InvokeCommandAction Command="{Binding SelectedCommand}" TriggerParameterPath="AddedItems" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DatePicker>