2013-10-14 2 views
4

Как очистить поле со списком в WPF? Я попробовал этот код:Удалить поле со списком в WPF

private void btClear1_Click(object sender, RoutedEventArgs e) 
    { 

     txtID.Text = String.Empty; 
     this.cbType.SelectedItem = -1; 
    } 
+3

cbType.Items.Clear? – Fred

+2

Очистить, как в случае удаления всех элементов, или очистить, как при очистке выделения? –

+0

Очистить выбор – user2631662

ответ

2

Для отмены выбора Установите SelectedIndex не SelectedItem

cboType.SelectedIndex = -1; 

Вы можете установить SelectedItem или SelectedValue, но измените его на null вместо -1 (это указывает на объект, а не целое число).

cboType.SelectedItem = null; 
+0

Когда я пытаюсь это сделать, я получаю: Ссылка на объект не установлена ​​в экземпляр объекта. в cbType_SelectionChanged - – user2631662

+1

@ user2631662 Измените событие 'SelectionChanged', чтобы проверить значение null, прежде чем он попытается сделать что-то в выбранном элементе со списком –

+0

как это сделать – user2631662

4

cbTypion.SelectedItem = -1 очистить выбор cbType.Items.Clear(), чтобы очистить все элементы

+0

Стандартный комбинированный блок WPF не имеет ничего, называемого 'ClearSelection()'. Может быть, из ASP или что-то еще? –

+0

@KevinDiTraglia Я стою исправлен! Это было некоторое время с тех пор, как я разработал WPF. Да, он доступен в ASP.NET. Ответ обновлен. – Fred

+0

Это действительно зависит от того, был ли 'ComboBox' заполнен просто добавлением' ComboBoxItem' - либо в XAML, либо динамически - или если он был заполнен путем привязки к 'ItemsSource'. Если вы используете последнее, вы не можете выполнить 'cbType.Items.Clear()' - вы получаете: 'Операция недействительна, пока ItemSource используется. Доступ и изменение элементов с помощью ItemsControl.ItemsSource вместо .'. – vapcguy

3

Вы можете сбросить поле со списком путем привязки на странице XAML.

Например, в этом поле со списком поле на странице XAML:

text={Binding viewmodelobject Name.property Name} 

А потом в ViewModelPage:

viewmodelobject Name.property Name=""; 
1

Полностью клиринговые окнеОтмеченные
Для Googlers, так как заголовок вводящий в заблуждение, если мы говорим об очистке предметов из коробки, я видел несколько ответов, говорящих, чтобы использовать cbType.Items.Clear(). Это зависит от того, как были загружены элементы. Вы могли бы жестко закодировать их в XAML, динамически добавлять их с помощью функции во время выполнения, использовать тип привязки данных и/или загружать их в .ItemSource. Он будет работать для всех, кроме последнего.

При использовании .ItemSource для загрузки ComboBox через DataTable-х DefaultView, например, вы не можете просто сделать cbType.Items.Clear(). Так как метод заполнения раскрывающегося списка не был включен в этот вопрос, я полагаю, что когда вы установите .ItemSource, вы должны сделать:

cbType.ItemsSource = null;

вместо этого. В противном случае, если вы пытаетесь cbType.Items.Clear() вы получите:

Operation is not valid while ItemSource is in use. Access and modify 
elements with ItemsControl.ItemsSource instead 


Очистка выбранного элемента
Я вернулся и увидел замечание OP, заявив, что желание было, чтобы очистить выбор, а не коробка. Для этого оставлены другие ответы:

cbType.SelectedIndex = -1; 
cbType.Text = ""; // I've found the first line does this for me, as far as appearances, but found other postings saying it's necessary - maybe they were using the property and it wasn't getting cleared, otherwise 
Смежные вопросы