我是Caliburn.Micro的新人,还有一些我还没有得到的东西。
首先是ViewModel:
首先是一个管理其他ViewModel集合的ViewModel:
public class NavigationBarViewModel : PropertyChangedBase
{
public BindableCollection<IHaveDisplayName> Items { get; set; }
}
我有一个ItemsControl(它的Telerik RadOutlookBar,如果这很重要)作为UserControl的根
该视图的我也设置了ItemTemplate,确保我插入到集合中的ViewModel包装在相应的RadOutlookBarItem中(我应该在这里使用ItemContainer而不是ItemTemplate吗?)。
<telerik:RadOutlookBar x:Name="Items">
<telerik:RadOutlookBar.TitleTemplate>
<DataTemplate>
<ContentControl Content="{Binding Path=DisplayName}" />
</DataTemplate>
</telerik:RadOutlookBar.TitleTemplate>
<telerik:RadOutlookBar.ItemTemplate>
<DataTemplate>
<telerik:RadOutlookBarItem cal:Bind.Model="{Binding}"
Header="{Binding Path=DisplayName}">
<ContentControl />
</telerik:RadOutlookBarItem>
</DataTemplate>
</telerik:RadOutlookBar.ItemTemplate>
</telerik:RadOutlookBar>
这样我就不希望集合中的ViewModel出现在ContentControl所在的位置。我将模型绑定到DataTemplate的根项以确保约定可以工作,但不知道如何使用约定绑定到ContentControl。 DataTemplate中的DataContext当然是ViewModel本身。使用普通的WPF标准,我会将Content =&#34; {Binding}&#34;。
现在模型在RadOutlookBarItem内部,但它的视图没有得到应用。甚至找不到View,只能找到带有类名的字符串。
这不是正确的方法吗?
答案 0 :(得分:2)
我在这里回答:Dynamic Telerik RadOutlookBar headers come out wrong with ItemTemplate我认为这是一个无关紧要的问题,我使用了错误的属性。 ItemTemplate控制选择器和contentTemplate选择时出现的内容。以下是有效的代码:
<telerik:RadOutlookBar x:Name="Items">
<telerik:RadOutlookBar.ContentTemplate>
<DataTemplate >
<ContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</telerik:RadOutlookBar.ContentTemplate>
<telerik:RadOutlookBar.TitleTemplate>
<DataTemplate>
<TextBlock x:Name="DisplayName"
cal:Bind.Model="{Binding}" />
</DataTemplate>
</telerik:RadOutlookBar.TitleTemplate>
<telerik:RadOutlookBar.ItemTemplate>
<DataTemplate>
<TextBlock x:Name="DisplayName"
cal:Bind.Model="{Binding}" />
</DataTemplate>
</telerik:RadOutlookBar.ItemTemplate>
</telerik:RadOutlookBar>