使用ViewModels对UserControl进行ItemsControl

时间:2014-10-28 11:08:57

标签: wpf xaml mvvm user-controls itemscontrol

我想用XAML做一个非常简单的事情(我认为)。

我想显示一个用户控件列表' UserControl A' (使用viewModels' ViewModel A')在ItemControl中,托管在' UserControl B'。

' ViewModel B'包含一个属性,它是一个observableCollection' UserControls A'。

在' userControls A'的Ctor中,我设置了:

Me.DataContext = New ViewModelA()
在' userControlB'的Ctor中,我设置了相同的内容,但使用的是ViewModel B'。

' ViewModel A'包含两个属性(整数)'行'和' Col'。

我想要的是绑定每个用户控件A'以及'Col'的价值观。和' Row'在用户控件B'。

中托管的网格中

以下是我所做的: UserControl B:

<ItemsControl ItemsSource="{Binding ListOfUserControl_A}" Margin="1.5">
            <ItemsPanelTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                </Grid>
            </ItemsPanelTemplate>
            <ItemsControl.ItemContainerStyle>
                <Style>
                    <Setter Property="Grid.Column" Value="{Binding Col}" />
                    <Setter Property="Grid.Row" Value="{Binding Row}" />
                </Style>
            </ItemsControl.ItemContainerStyle>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <local:UserControl_A/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

在此过程之前,该集合已正确填充。

但是在运行时我有这个错误(翻译自法语): &#34;收藏品必须为空,才能使用&#39; ItemsSource&#39;&#34;。

我之前遇到的另一个错误是&#39; itemTemplate和ItemTemplateSelector对UserControl_B无效...&#39; ...

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您忘记将ItemsPanelTemplate包裹在ItemsControl.ItemsPanel标记中。如果没有ItemsControlItemsPanelTemplate视为项目,并且您已设置ItemsSource,则会收到该错误

<ItemsControl ItemsSource="{Binding ListOfUserControl_A}" Margin="1.5">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>