2014-10-28 4 views
0

Я хотел бы сделать очень простую вещь (я думаю) с помощью XAML.ItemsControl UserControls with ViewModels

Я хочу показать список UserControl A usercontrols '(с ViewModel A' viewModels ') в ItemControl, размещенном в' UserControl B '.

«ViewModel B» содержит свойство, которое является наблюдаемым символом «UserControls A».

В CTOR от 'UserControls А', я установил:

Me.DataContext = New ViewModelA() 

в CTOR от 'userControlB', я установил то же самое, но с 'ViewModel B'.

«ViewModel A» содержит два свойства (Integer) «Row» и «Col».

Я хочу привязать каждый «userControl A» и значения «Col» и «Row» в сетке, размещенной в «UserControl 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> 

Коллекция правильно заполнена до этого процесса.

Но во время выполнения у меня есть эта ошибка (перевод с французского): «Коллекция должна быть пуста для использования« ItemsSource ».

Другая ошибка, которую я до того, что «The ItemTemplate и ItemTemplateSelector не действительны для UserControl_B» ...

Что я делаю неправильно?

ответ

0

Вы забыли обернуть ItemsPanelTemplate в ItemsControl.ItemsPanel тег. Без этого ItemsControl лечит ItemsPanelTemplate как объект и так как вы уже установили ItemsSource вы получите эту ошибку

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

OMG, такой идиот. Thx человек. – Thib