Я хотел бы использовать соглашения Caliburn.Micro для элемента управления Accordion из Silverlight и WPF Toolkits:
Вид:
<Grid Background="White">
<Controls:Accordion x:Name="Items"/>
</Grid>
ViewModel:
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 привязывает элементы в ItemsSource Accordion к заголовкам AccordionItem:
Я добавил соглашение для шаблона содержимого Accordion:
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 к DisplayName AccItemViewModel (IScreen), либо иметь свойство модели представления заголовка в AccItemViewModel. AccordionItem имеет HeaderProperty и HeaderTemplateProperty, но я не могу понять, как применить к ним соглашения.