Я бы хотел использовать условные обозначения Caliburn.Micro для элемента управления Accordion от Silverlight и WPF Toolkits:
View:
<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 связывает элементы в ItemSource Аккордеона с заголовками AccordionItem:
Я добавил соглашение для 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 с DisplayName объекта AccItemViewModel (IScreen), либо иметь свойство модели представления Header в AccItemViewModel.У AccordionItem есть HeaderProperty и HeaderTemplateProperty, но я не могу понять, как применить к ним соглашения.