#realJSOP Ответов: 2

Привязки WPF ComboBox в элемент управления ListView


У меня есть два объекта одного типа, которые называются Object1 и Object2.

Внутри этих объектов находятся две коллекции - Collection1 и Collection2.

У меня есть listview с ItemsSource="{Binding Path=Object1.Collection1}".

ListView содержит столбец с ComboBox с ItemsSource="{Binding Path=Object2.Collection2}".

Когда я запускаю приложение, combobox всегда пуст (никаких элементов).

Как привязать combobox к другому источнику элементов в listview?

Что я уже пробовал:

Я попытался установить datacontext в поле со списком на {Binding DataContext.Object2} но это не возымело никакого эффекта.

Когда я опускаю комбо вниз, DataContext и ItemsSource находиться как null.

2 Ответов

Рейтинг:
2

Richard Deeming

Если я правильно понял вашу структуру, что-то вроде этого должно сработать:

<Window ...>
    <Window.Resources>
        <CollectionViewSource x:Key="Collection2View" Source="{Binding Path=Object2.Collection2}" />
    </Window.Resources>
    
    <ListView ItemsSource="{Binding Object1.Collection1}" ...>
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn Header="Collection 2">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{StaticResource Collection2View}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>


Рейтинг:
0

Gerry Schmitz

Если Object1 и Object2 определены в классе "окно", то

этот.DataContext = это;

в конструкторе это следует сделать (для случая, когда Path=Object1...)


#realJSOP

Да, я тоже так думал, но не повезло. Я думаю, что мне придется провести некоторую неприятную реорганизацию данных... :/

Gerry Schmitz

Мне было трудно представить себе поля со списком в виде списка. Теперь "пользовательские элементы управления" с комбо в listview-это совсем другое дело.

Источником элемента представления списка является одна коллекция.

Пользовательские элементы управления привязываются к элементам коллекции.

Комбинации привязываются к коллекциям в элементе, к которому привязан пользовательский элемент управления.

Использование наблюдаемых коллекций может потребоваться, а может и не понадобиться; в зависимости от того, обновляете ли вы коллекции на лету.

Легко. ;o)

("Шаблоны" служат той же цели, что и пользовательские элементы управления, которые вы создаете сами и загружаете в представление списка - я предпочитаю UC, как только вы получаете "фантазию").

#realJSOP

Я сделал какую-то уродливую реорганизацию данных и заставил ее работать... Я думал, что смогу указать несколько контекстов данных, но ничего из того, что я пробовал, не сработало.

Gerry Schmitz

Вы можете; вы просто должны быть осведомлены о том, как они разрешаются.

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