Добавление небольшого всплывающего окна в список wpf, который уже использует itemsource

Вот часть моего кода wpf-xaml:


<ListBox x:Name="TestJobSuiteListBox" Grid.Row="1" ItemsSource="{Binding AvailableJobs}" MouseRightButtonDown="TestJobSuiteListBox_OnMouseRightButtonDown">
    <ListBox.ItemTemplate>
        <HierarchicalDataTemplate>
            <ListBoxItem Content="{Binding Name}"/>
        </HierarchicalDataTemplate>
    </ListBox.ItemTemplate>                            
</ListBox>

Я хотел бы добавить еще один элемент списка в этот список, и я не хочу, чтобы он был виден до того, как вы щелкнете правой кнопкой мыши по списку. Он также не должен быть привязан к свойству «Доступные задания».

Что-то вроде этого :


<ListBox x:Name="TestJobSuiteListBox" Grid.Row="1" ItemsSource="{Binding AvailableJobs}" MouseRightButtonDown="TestJobSuiteListBox_OnMouseRightButtonDown">
    <ListBox.ItemTemplate>
        <HierarchicalDataTemplate>
            <ListBoxItem Content="{Binding Name}"/>
        </HierarchicalDataTemplate>
    </ListBox.ItemTemplate>
    <ListBoxItem x:Name="AddJobbListBoxItem" Visibility="Hidden"></ListBoxItem>
</ListBox>

Это не работает, потому что "itemsource должен быть пустой проблемой"

У кого-нибудь есть хорошая идея, как я могу это сделать?

Мне не нужна помощь с функциями видимости/щелчка правой кнопкой мыши.

Заранее спасибо, надеюсь проблема понятна.


person user3742045    schedule 22.07.2014    source источник
comment
Поле «что-то вроде этого:» пусто. (Фиксированный)   -  person Michel Keijzers    schedule 22.07.2014
comment
У кого-нибудь есть хорошее представление о том, как я могу это сделать? Да... вы можете научиться делать это правильно. Ваш код настолько неверен, что я даже не могу вам помочь. Этот веб-сайт создан не для того, чтобы научить пользователей учить язык. Вы должны сделать это сами, из учебных пособий в Интернете. Начните со страницы Обзор привязки данных. на MSDN.   -  person Sheridan    schedule 22.07.2014


Ответы (2)


Вы можете поместить список в stackPanel и отключить его прокрутку. Затем добавьте этот элемент также в stackPanel под списком и, наконец, добавьте этот stackPanel в scrollViewer. Тогда у вас есть список с AddButton.

<ScrollViewer>
    <StackPanel>
         <ListBox ItemsSource="{Binding AvailableJobs}"
                  ScrollViewer.VerticalScrollBarVisibility="Disabled">
         <!-- ...  -->
         </ListBox>
         <Button x:Name="AddJobbButton" Visibility="Collapsed" />
    </StackPanel>
</ScrollViewer>

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

РЕДАКТИРОВАТЬ: конечно, вы должны слушать события мыши и затем устанавливать видимость кнопки видимой и так далее...

person user3777939    schedule 22.07.2014

Я думаю, вам нужно использовать ItemTemplateSelector для достижения этой функциональности. Вы можете создать разные DataTemplate в соответствии с вашими требованиями в разделе Resources и правильно связать в xaml. Проверьте ответ здесь, он даст вам представление о подходе. См. также этот пример. Надеюсь, это поможет.

person Debasis    schedule 22.07.2014