WPF Combobox текущая позиция прокрутки не изменяется - PullRequest
0 голосов
/ 31 августа 2010

У меня есть открытое свойство типа ObservableCollection<ClassName> в коде файла, и я связал его со свойством ItemsSource Combobox.

<ComboBox Height="23" 
                  Margin="82,34,71,0" 
                  Name="comboBox1" 
                  VerticalAlignment="Top"
                  ItemsSource="{Binding Path=Collection}"
                  DisplayMemberPath="Name" />

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

Теперь я нажимаю кнопку, которая добавит еще один элемент в коллекцию, и я хочу установить курсор на началосписок.Для этого я попробовал следующий код:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Collection.Add(new TempObject() { Name = "new item" });
        comboBox1.SelectedIndex = -1;
    }

. При этом полоса прокрутки не устанавливается в начало списка.Я попытался очистить список и заполнить его снова, но он все еще не работал.

помогите, пожалуйста ....

После применения BringIntoView:

 private void button1_Click(object sender, RoutedEventArgs e)
        {
            Collection.Clear();
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });

            comboBox1.SelectedIndex = -1;

            ComboBoxItem item = comboBox1.ItemContainerGenerator.ContainerFromIndex(0) 
                                                                       as ComboBoxItem;

            if (item != null) item.BringIntoView();
     }

Это будетвсегда возвращайте нуль для элемента ComboBoxItem.

Ответы [ 2 ]

1 голос
/ 31 августа 2010

Попробуйте это:

comboBox1.Items[0].BringIntoView();
0 голосов
/ 31 августа 2010

Под «я хочу установить курсор на начало списка» вы хотите установить выбранный элемент в выпадающем списке на первый элемент? Затем установите его на индекс 0, индекс -1 означает отсутствие выбора.

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    Collection.Add(new TempObject() { Name = "new item" }); 
    comboBox1.SelectedIndex = 0; 
} 

Обновление после вашего комментария: Поскольку ваш комбинированный список привязан к данным, вы можете использовать ItemContainerGenerator, чтобы перейти к первому элементу. Это будет работать, только если элементы уже были обработаны, то есть раскрывающийся список был открыт.

private void button1_Click(object sender, RoutedEventArgs e)  
{  
   Collection.Add(new TempObject() { Name = "new item" });  
   comboBox1.SelectedIndex = -1;  
   ComboBoxItem item = comboBox1.ItemContainerGenerator.ContainerFromIndex(0) as ComboBoxItem;
   if (item != null) item.BringIntoView();
}  

Другим более простым способом было бы просто выбрать первый элемент, а затем отменить его выбор.

private void button1_Click(object sender, RoutedEventArgs e)  
{  
    Collection.Add(new TempObject() { Name = "new item" });  
    comboBox1.SelectedIndex = 0;  
    comboBox1.SelectedIndex = -1;  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...