【发布时间】:2011-07-01 00:08:26
【问题描述】:
我想对 Silverlight 和 WPF 工具包中的 Accordion 控件使用 Caliburn.Micro 约定:
查看:
<Grid Background="White">
<Controls:Accordion x:Name="Items"/>
</Grid>
视图模型:
public class ShellViewModel : IShell
{
public ShellViewModel()
{
Items = new List<AccItemViewModel>
{
new AccItemViewModel
{
DisplayName = "header one",
Content = "content one"
},
new AccItemViewModel
{
DisplayName = "header two",
Content = "content two"
},
};
}
public IEnumerable<IScreen> Items { get; set; }
public class AccItemViewModel : Screen
{
public string Content { get; set; }
}
默认情况下,Caliburn 将 Accordion 的 ItemsSource 中的元素绑定到 AccordionItem 标头中:
我已经为 Accordion 的 ContentTemplate 添加了约定:
private void AddCustomConventions()
{
ConventionManager.AddElementConvention<Accordion>
(Accordion.ItemsSourceProperty, "SelectedItem", "SelectionChanged")
.ApplyBinding =
(viewModelType, path, property, element, convention) =>
{
if (ConventionManager
.GetElementConvention(typeof(ItemsControl))
.ApplyBinding(viewModelType, path, property,
element, convention))
{
element.SetValue(Accordion.ContentTemplateProperty,
ConventionManager.DefaultItemTemplate);
return true;
}
return false;
};
}
取得了以下成绩:
但我想将 AccordionItem 的标头绑定到 AccItemViewModel(IScreen) 的 DisplayName,或者在 AccItemViewModel 上有一个标头视图模型属性。 AccordionItem 有 HeaderProperty 和 HeaderTemplateProperty,但我不知道如何对这些应用约定。
【问题讨论】:
标签: silverlight caliburn.micro