Я использую свойство ComboBox ItemsSource для отображения элементов из списка в поле со списком.Установить значение по умолчанию в WPF ComboBox
Ниже приводится код:
<ComboBox x:Name="Cmb_Tax" ItemsSource="{Binding TaxList}"
DisplayMemberPath="ChargeName" SelectedItem="{Binding
SelectedTax,UpdateSourceTrigger=PropertyChanged}" IsEditable="True"
IsTextSearchEnabled="True" SelectionChanged="Cmb_Tax_SelectionChanged"/>
Classes.Charges _selected_tax = new Classes.Charges();
public Classes.Charges SelectedTax
{
get
{
return _selected_tax;
}
set
{
_selected_tax = value;
}
}
List<Classes.Charges> _taxlist = new List<Classes.Charges>();
public List<Classes.Charges> TaxList
{
get
{
return _taxlist;
}
set
{
_taxlist = value;
OnPropertyChanged("TaxList");
}
}
Он отображает элементы в поле со списком правильно.
В TaxList "No Tax"
есть определенный пункт, который я хочу выбрать по умолчанию в поле со списком. Этот элемент может присутствовать в любом индексе в списке (необязательный первый или последний элемент списка).
Я пытаюсь использовать следующий код, чтобы установить свойство выбранного индекса в поле со списком, но, к сожалению, он не работает.
TaxList = Classes.Charges.GetChargeList("Tax");
Cmb_Tax.DataContext = this;
int i = TaxList.FindIndex(x => x.ChargeName == tax_name);
Cmb_Tax.SelectedIndex = i;
Метод FindIndex() возвращает индекс "No Tax"
правильно, но при попытке присвоения его SelectedIndex
комбо SelectedIndex
не меняется. Он остается равным -1.
Update1
private void Cmb_Tax_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
MessageBox.Show(SelectedTax.ChargeName);
}
Update2 Обновленный код согласно предложению @ElectricRouge
<ComboBox x:Name="Cmb_Tax" ItemsSource="{Binding TaxList, Mode=TwoWay}"
DisplayMemberPath="ChargeName" SelectedItem="{Binding SelectedTax,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
IsEditable="True" IsTextSearchEnabled="True"
SelectionChanged="Cmb_Tax_SelectionChanged"/>
Classes.Charges _selected_tax = new Classes.Charges();
public Classes.Charges SelectedTax
{
get
{
return _selected_tax;
}
set
{
_selected_tax = value;
OnPropertyChanged("SelectedTax");
}
}
ObservableCollection<Classes.Charges> _taxlist = new ObservableCollection<Classes.Charges>();
public ObservableCollection<Classes.Charges> TaxList
{
get
{
return _taxlist;
}
set
{
_taxlist = value;
OnPropertyChanged("TaxList");
}
}
public void Load_Tax(string tax_name = null, Classes.Charges selected_tax = null)
{
TaxList = Classes.Charges.GetParticularChargeList("Tax");
Cmb_Tax.DataContext = this;
//Cmb_Tax.SelectedValue = tax_name;
SelectedTax = selected_tax;
//int i = TaxList.FindIndex(x => x.ChargeName == tax_name);
//Cmb_Tax.SelectedIndex = i;
}
Любая идея, почему это должно происходить? Также предлагайте любой другой подход к отображению по умолчанию в поле со списком.
мне интересно посмотреть, что делает ваш 'метод Cmb_Tax_SelectionChanged'. Можете ли вы предоставить это, чтобы мы могли лучше понять проблему? – deloreyk
Пробовал ли вы установить свой элемент 'SelectedTax' (что указывает ссылка на ваш SelectedItem), а не устанавливать' SelectedIndex' в поле со списком? – blins
Пытался извлечь и присвоить объект Selected Tax без объекта «No Tax», но все равно не повезло :( –