将ViewModel本身绑定在DataTemplate中与Caliburn Micro Conventions绑定

时间:2012-06-22 16:25:26

标签: wpf binding mvvm caliburn.micro

我是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,只能找到带有类名的字符串。

这不是正确的方法吗?

1 个答案:

答案 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>
相关问题