【发布时间】:2021-05-04 19:01:25
【问题描述】:
我正在尝试创建一个自定义控件来呈现可以选择日期的日历。我需要能够将ITemplate 传递给每天都会呈现的控件。日子由中继器呈现。
由于目前没有允许绑定到ITemplate 的现有控件(或将ITemplate 与集合以外的任何内容一起使用),我如何轻松地从controlProperty 呈现ITemplate?
我希望有某种只呈现ITemplate 的控件,以便可以在其他地方重用。
部分控制标记:
<!-- ... -->
<dot:Repeater ID="DaysRepeater" DataSource="{value: Days}" class="list-group list-group-flush calendar-grid">
<ItemTemplate>
<div class="{{value: "calendar-day calendar-day-" + DayOfWeekIndex }}">
<dot:LinkButton ID="DayButton" class="{{value: "list-group-item list-group-item-action " + (Selected ? "active calendar-day-btn" : "calendar-day-btn") }}"
Click="{controlCommand: SelectDate(_this.Date)}">
{{value: DayText}}
<!-- RENDER TEMPLATE HERE -->
</dot:LinkButton>
</div>
</ItemTemplate>
</dot:Repeater>
代码隐藏中的ItemTemplate:
[MarkupOptions(AllowBinding = false, MappingMode = MappingMode.InnerElement, Required = false)]
[ConstantDataContextChange(typeof(ICollection<CalendarDayModel>)), CollectionElementDataContextChange(1)]
public ITemplate ItemTemplate
{
get { return (ITemplate)GetValue(ItemTemplateProperty)!; }
set { SetValue(ItemTemplateProperty, value); }
}
public static readonly DotvvmProperty ItemTemplateProperty =
DotvvmProperty.Register<ITemplate, Calendar>(t => t.ItemTemplate);
控件使用示例:
<cc:Calendar DataContext="{value: CalendarViewModel}" MultiSelect="true">
<ItemTemplate>
Selected: {{value: Selected}}
</ItemTemplate>
</cc:Calendar>
【问题讨论】: