2013-11-23 1 views
1

У меня есть словарь ресурсов, в котором я хочу иметь общий DataTemplate для ComboBox.Что-то вроде Loop в XAML

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <DataTemplate DataType="{x:Type ComboBox}"> 
     <StackPanel Orientation="Horizontal"> 
      <!--Here I need to use something like For Loop--> 
      <TextBlock Text=""></TextBlock> 
     </StackPanel> 
    </DataTemplate> 
</ResourceDictionary> 

Теперь я создал свойство зависимости типа integer с именем NoOfColumns. При объявлении comboBox мне нужно установить свойство NoOfColumns для автоматического создания этого количества столбцов. Я хочу, чтобы они были databind.

Дополнение по просьбе Джо

<ComboBox x:Name="cbUnder" ItemsSource="{Binding GroupsAndCorrespondingEffects}" 
    IsEditable="True" SelectedItem="{Binding SelectedGroup, Mode=TwoWay}" 
    Text="{Binding InputValue, UpdateSourceTrigger=PropertyChanged}" TextSearch.TextPath="GroupName" 
    Grid.Column="1" Grid.ColumnSpan="4" Grid.Row="3"> 
    <ComboBox.Resources> 
     <DataTemplate DataType="{x:Type vm:GroupAndCorrespondingEffect}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding GroupName}" Width="250"> 
        <TextBlock.Style> 
         <Style TargetType="TextBlock"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding IsHighlighted}" Value="True"> 
            <Setter Property="Foreground" Value="Blue" /> 
            <Setter Property="FontWeight" Value="Bold"/> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </TextBlock.Style> 
       </TextBlock> 
       <TextBlock Text="{Binding CorrespondingEffect}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.Resources> 
</ComboBox> 
+0

Кто является владельцем этого DP? Какие столбцы вы хотите создать в combobox? –

+0

Я работаю над системой управления запасами. У меня есть все права. Некоторые comboboxes имеют два столбца, такие как NameOfTheGroup и CorrespondingEffect. некоторые из них будут иметь 3 столбца, а некоторые из них будут иметь 1 столбец. Данные поступают из SQL Server. – Khushi

+0

Нет ничего подобного «петле» в XAML. XAML - это декларативный язык, а не императивный. Нет «инструкций» и нет исполняемого кода XAML. Вы ищете 'ItemsControl'. Пожалуйста, разместите снимок экрана о том, что вам нужно, и я могу сказать вам правильный способ сделать это в WPF. –

ответ

4

Там нет ничего, как for в XAML, но ItemsControl очень похож foreach. Вместо того, чтобы установить свойство int, сделайте ObservableCollection<T> и добавьте к нему много объектов, а затем привяжите ItemsControl к свойству коллекции.

Это имеет дополнительное преимущество в том, что каждый элемент коллекции может выставлять свойства, подлежащие связыванию, например. если вы хотите отобразить различный текст в каждом TextBlock, вы можете поместить свойство в свой элемент коллекции и связать TextBlock с этим свойством.

+0

Я думаю, что вы неправильно понимаете мой вопрос. Я хочу иметь многоколоночный comboBox, и я хочу определить столбцы в словаре ресурсов. Но проблема в том, что у всех comboBoxes не будет такого же. столбцов. Мне было интересно, как это сделать. – Khushi

+0

Думаю, вам придется опубликовать код, чтобы показать, как вы делаете столбцы в своем ComboBox (и как вы привязываете содержимое ComboBoxes, если это применимо). Элемент ItemsControl все еще может делать то, что вы хотите, но было бы сложнее, если ComboBoxes будут привязаны к базе данных. –

+0

Я обновил свой код в соответствии с вашим запросом. – Khushi

Смежные вопросы