【发布时间】:2014-06-10 21:03:38
【问题描述】:
我有一个从 ComboBox 派生的自定义“DateRangeSelector”控件。这是一个带有以下过滤器的下拉控件:
1. 今天
2. 未来三天
3. 未来三周
4. 自定义范围(允许用户设置自定义日期范围)
现在这个“DateRangeSelector”控件被添加到另一个 XAML(ActivityListMenuControlView.xaml) 中:
<DateRangeSelector:DateRangeSelectorControl x:Name="DateRangeSelector"
Grid.Column="1"
Margin="10 0 0 0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
AutomationProperties.AutomationId="AID_TaskListDateRangeSelector"
DateRangeUpdatedCmd="{Binding Path=DateRangeSelectionUpdatedCommand}"
TodayDateUpdatedCmd="{Binding Path=TodayDateUpdatedCommand}"
FontSize="{StaticResource TaskListMenuFontSize}"
RangeOptions="{Binding Path=DateRangeSelectionOptions,
Mode=OneTime}"
SelectedDateRange="{Binding Path=SelectedRange,
Mode=TwoWay}"
Visibility="{Binding Path=ShowFilterOptions,
Converter={StaticResource boolToVisibility}}" />
从上面的代码可以明显看出,我在“DateRangeSelector”中创建了一个命令“TodayDateUpdatedCmd”,旨在在系统日期更改时更新此控件中的“Today”过滤器,并绑定到“ActivityListMenuControlViewModel”中的“TodayDateUpdatedCommand”命令。
更新日期的代码位于“DateRangeSelector”本身的方法“SetDateValues”中。
我只是对如何从“ActivityListMenuControlViewModel”执行此方法感到困惑?
请帮忙。
更新: DateRangeSelector 只是一个没有视图/视图模型的类。代码如下:
public class DateRangeSelectorControl : ComboBox, INotifyPropertyChanged
{
public static readonly DependencyProperty TodayDateUpdateCmdProperty = DependencyProperty.Register("TodayDateUpdatedCmd", typeof(ICommand), typeof(DateRangeSelectorControl),
new PropertyMetadata(null));
public ICommand TodayDateUpdatedCmd
{
get { return (ICommand)this.GetValue(TodayDateUpdateCmdProperty); }
set
{
this.SetValue(TodayDateUpdateCmdProperty, value);
}
}
/// <summary>
///
/// </summary>
private void SetDateValues()
{
DateTime todaysDate = DateTime.Now;
TodayText = Utility.GetStringFromResource("TodayLabel") + " (" + todaysDate.ToShortDateString() + ")";
NextThreeDaysText = Utility.GetStringFromResource("NextThreeDaysLabel") + " (" + todaysDate.ToShortDateString() + " - " + todaysDate.AddDays(3).ToShortDateString() + ")";
NextWeekText = Utility.GetStringFromResource("NextWeekLabel") + " (" + todaysDate.ToShortDateString() + " - " + todaysDate.AddDays(7).ToShortDateString() + ")";
SetCustomDateRangeText();
}
}
从上面的代码可以明显看出,我首先注册了一个依赖属性“TodayDateUpdateCmdProperty”和在“ActivityListMenuControlView.xaml”中使用的命令属性“TodayDateUpdatedCmd”,如 XAML sn-p 中所示。此外,我需要在 DateRangeSelector 类中执行方法“SetDateValues”来更新今天的日期。 现在请帮助我如何实现这一目标?
更新: 根据@GazTheDestroyer 的建议,我对代码进行了更改,现在没有使用任何命令。但是现在使用以下详细信息获取运行时 XamlParseException:
"'在类型 'VMS.Nexus.Client.Common.Controls.DateRangeSelector.DateRangeSelectorControl' 上调用与指定绑定约束匹配的构造函数引发了异常。'行号 '45' 和行位置 '14'。"}
内部异常: {"默认值类型与属性类型 'TodayDate' 不匹配。"}
在我创建 DateRangeSelector 的 ActivityListMenuControlView.xaml 中引发了此异常。 请帮忙
【问题讨论】: