2016-01-28 6 views
0

Хорошо, это, наверное, что-то довольно простое, что я не совсем прав. Я только сейчас изучаю, как динамически добавлять элементы с помощью ItemsControl, как показано ниже.Связывание содержимого и свойства кнопки элемента управления ControlTemplate Свойство

<ItemsControl ItemsSource="{Binding Buttons}"> 
         <ItemsControl.Template> 
         <ControlTemplate> 
         <Button FontWeight="Bold" Command="{Binding SelectMaterialCommand}" CommandParameter="{Binding CommandParameter}" Width="50" Height="50" Style="{StaticResource RoundedButtonStyle}" Margin="0,0,0,0" Click="Button_Click_2" Content="{Binding .Content}"></Button> 
         </ControlTemplate> 
         </ItemsControl.Template> 
</ItemsControl> 

Элемент ItemsControl ItemsSource привязан к ObservableCollection of Buttons. В коде я могу создать кнопку, установить свойства Content и CommandParameter и добавить ее в ObservableCollection. Когда я запускаю приложение, кнопка заполняется, но я не могу корректно связывать свойства Content и CommandParameter.

Я попытался сделать несколько различных методов, таких как Binding Path=., Binding Path=Content, Binding Path=.Content ... и т. Д., Но ничего не работает. Любая помощь будет оценена по достоинству.

+0

Почему вы не использовали DataTemplate? – Subru

+0

Я просто изучаю эту концепцию. Должен ли я использовать DataTemplate вместо этого? – ProgrammingDude

+1

Если вы ожидаете, что каждый элемент в элементе управления будет кнопкой, тогда будет использоваться дата-шаблон. – Subru

ответ

0

Следуя совету Subramaniam B, я получил это для работы, используя шаблон данных, как показано на рисунке, который находится в разделе UserControl.Resources.

<DataTemplate x:Key="temp" DataType="{x:Type local:ButtonModel}"> 
      <telerik:RadButton FontWeight="Bold" FontSize="16" Command="{Binding ButtonCommand}" CommandParameter="{Binding Path=Content}" Width="100" Height="75" Margin="0,0,0,0" MouseLeftButtonUp="Button_Click_2" Content="{Binding Path=Content}"> 
       <telerik:RadButton.Background> 
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
         <GradientStop Color="GhostWhite" Offset="0"/> 
         <GradientStop Color="Gray" Offset="0.5"/> 
         <GradientStop Color="Gray" Offset="0.5"/> 
         <GradientStop Color="GhostWhite" Offset="1"/> 
        </LinearGradientBrush> 
       </telerik:RadButton.Background> 
      </telerik:RadButton> 
     </DataTemplate> 

Вот где используется шаблон были использованы:

<telerik:RadCarousel Loaded="MaterialCar_Loaded" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" x:Name="MaterialCar" Height="200" Background="Blue" ItemTemplate="{StaticResource temp}" ItemsSource="{Binding Buttons}" Margin="0,0,0,0"/> 
0

В вашем примере вы устанавливаете шаблон для всей ItemsControl (ака: LIST кнопок), чтобы быть кнопка.

Независимо от того, какие элементы находятся в коллекции кнопок, этот элемент управления будет отображаться как одна кнопка. Вместо этого вам нужно оставить шаблон только для самого элемента управления и использовать шаблон I для элементов, входящих в список.

<ItemsControl ItemsSource="{Binding Buttons}"> 
     <!-- ItemsControl.Template becomes ItemsControl.ItemTemplate below --> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Button FontWeight="Bold" Command="{Binding SelectMaterialCommand}" CommandParameter="{Binding CommandParameter}" Width="50" Height="50" Style="{StaticResource RoundedButtonStyle}" Margin="0,0,0,0" Click="Button_Click_2" Content="{Binding .Content}"></Button> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl>