我将使用ComboBox的ItemsSource属性绑定来显示一个List中的项到下拉框中。以下是代码:
有任何想法为什么会发生这种情况吗?同时,请建议其他方法在组合框中显示默认值。
<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中有一个特定的项目"无税"
,我希望在组合框中默认选择它。该项可以出现在列表的任何索引位置(不一定是列表的第一个或最后一个项目)。
我正在尝试使用以下代码设置组合框的选定索引属性,但遗憾的是它没有起作用。
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。
更新1
private void Cmb_Tax_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
MessageBox.Show(SelectedTax.ChargeName);
}
更新2 根据@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
方法是做什么的。你能提供一下吗,这样我们就可以更好地理解问题? - deloreykSelectedTax
成员(即你的SelectedItem绑定所指示的内容)而不是设置ComboBox的SelectedIndex
了吗? - blinsINotifyPropertyChanged
并从setter中引发PropertyChanged
事件。例如,它可能变成像这样的一行代码:SelectedTax = TaxList.FirstOrDefault(...
- blins