Управляющий массив XAML для статического числа комбинированных окон - PullRequest
2 голосов
/ 08 сентября 2011

Я хотел бы получить массив из 10 полей со списком в форме wpf.

ItemsSource комбинированных блоков идентичны - ObservableCollection выбираемых элементов.

Каждый выбранный элемент будет привязан к элементу в другой ObservableCollection, образно называемой «SelectedItems» ..

Каков наилучший способ сделать массив?Конечно, я мог бы иметь 10 отдельных полей со списком, но это было бы не очень элегантно.

Я не думаю, что шаблон ItemsControl - это то, что мне нужно, так как количество полей со списком статично.

Спасибо

Джо

Ответы [ 4 ]

3 голосов
/ 08 сентября 2011

Если я вас правильно понимаю, у вас есть 10 ComboBox с одинаковым списком элементов, но с разными источниками данных

В этом случае я мог бы создать общий стиль для ComboBox, который устанавливает общие свойства, такие как ItemsSourceSelectedItem, если привязка одинакова для всех элементов), а затем фактически создайте отдельные ComboBox в форме по мере необходимости.

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="{x:Type ComboBox}">
            <!-- Set the binding to wherever your ItemsSource resides. In this
                 case,I'm binding to a static class called Lists and a static 
                 property called ComboBoxItems -->
            <Setter Property="ItemsSource" 
                    Value="{Binding Source={x:Static local:Lists.ComboBoxItems}}" />

            <!-- Only use this setter if your binding is the same everywhere -->
            <Setter Property="SelectedItem" Value="{Binding SelectedItem}" />
        </Style>
    </StackPanel.Resources>

    <ComboBox DataContext="{Binding Item1}" />
    <ComboBox DataContext="{Binding Item2}" />
    <ComboBox DataContext="{Binding Item3}" />
    <ComboBox DataContext="{Binding Item4}" />
    <ComboBox DataContext="{Binding Item5}" />
    <ComboBox DataContext="{Binding Item6}" />
    <ComboBox DataContext="{Binding Item7}" />
    <ComboBox DataContext="{Binding Item8}" />
    <ComboBox DataContext="{Binding Item9}" />
    <ComboBox DataContext="{Binding Item10}" />
</StackPanel>

Конечно, если DataSource для ваших ComboBoxes CANчтобы быть помещенным в коллекцию, желательно, чтобы они были и чтобы вы использовали ItemsControl для отображения ComboBoxes

<ItemsControl ItemsSource="{Binding SelectedItems}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ComboBox SelectedItem="{Binding }"
                      ItemsSource="{Binding Source={x:Static local:Lists.ComboBoxItems}}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
2 голосов
/ 08 сентября 2011

Лично я думаю, что ItemsControl, который имеет ItemTemplate, который создает каждый ComboBox , - это путь!Вы всегда будете иметь ровно 10 из них?

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

2 голосов
/ 08 сентября 2011

Каждый выбранный элемент будет привязан к элементу в другой коллекции ObservableCollection, образно называемой «SelectedItems» ..

Учитывая, что вы фактически привязываетесь к коллекции, я бы сделалШаблон ItemsControl, и просто относиться к нему таким образом.Если вы не хотите настраивать макет (то есть: они не будут расположены вместе в представлении), это упростит дизайн, даже если количество элементов всегда «статично».

Если вы хотитерасположите элементы отдельно в представлении, тогда более подходящим может быть наличие 10 полей со списком.

0 голосов
/ 08 сентября 2011

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

Почему бы не спроектировать пользовательский интерфейс, дать каждому ComboBox имясоздать список и добавить каждый в этот список во время выполнения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...