2

我是 Caliburn.Micro 的新手,但我仍然没有得到一些东西。

视图模型优先:

首先是管理其他 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="{Binding}"。

现在模型在 RadOutlookBarItem 内,但它的视图没有被应用。连 View 都找不到,只有一个带有类名的字符串。

这不是正确的方法吗?

4

1 回答 1

2

正如我在这里回答的那样:动态 Telerik RadOutlookBar 标头与 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>
于 2012-06-22T17:35:34.857 回答