如何在自定义控件ItemsControl中引用viewmodel的集合

时间:2015-03-04 07:56:25

标签: wpf xaml mvvm-light

我有一个包含ItemsControl的自定义控件。自定义控件的DataContext设置为viewmodel。

我希望ItemsControl的ItemSource指向视图模型中的Observable Collection( TimeSpanSlots )。我目前有:

    <Style TargetType="{x:Type tsvw:TimeSpanGridView}">
    <Setter Property="DataContext" Value="{Binding TimeSpanGridViewModel, Mode=OneWay, Source={StaticResource Locator}}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type tsvw:TimeSpanGridView}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <ItemsControl ItemsSource="{Binding TimeSpanSlots}">
                        <ItemsControl.Resources>
                            <DataTemplate DataType="{x:Type tsvm:TimeSpanSlot}">
                                <Label Content="Time"/>
                            </DataTemplate>
                        </ItemsControl.Resources>

                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <Grid support:GridHelpers.RowCount="96"/>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>


                        <ItemsControl.ItemContainerStyle>
                            <Style>
                                <Setter Property="Grid.Row" Value="{Binding GridRow}" />
                                <Setter Property="Grid.RowSpan" Value="{Binding GridRowSpan}"/>
                                <Setter Property="Grid.Column" Value="0"/>
                            </Style>
                        </ItemsControl.ItemContainerStyle>
                    </ItemsControl>     
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

如果我有UserControl并将其更改为ItemsControl,我可以正常工作。我只是不确定在ControlTemplate中引用的语法。

这一部分特别是:

<ItemsControl ItemsSource="{Binding TimeSpanSlots}">

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:1)

知道了。

我将自定义控件的XAML保存在单独的ResourceDictionary中,并且没有在App.XAML中正确合并。

@Clemens你是对的,它只是继承了DataContext。尼斯!