【发布时间】:2014-02-03 19:14:32
【问题描述】:
我正在使用 ComboBox ItemsSource 属性绑定来将列表中的项目显示到组合框。
以下是代码:
<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。
更新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方法的作用。您能否提供这些信息以便我们更好地理解问题? -
您是否尝试设置您的
SelectedTax成员(您的 SelectedItem 绑定表示的内容)而不是设置组合框的SelectedIndex? -
尝试获取包含“无税”的对象并将其分配给 SelectedTax,但仍然没有运气:(
-
我会考虑实现
INotifyPropertyChanged并从 setter 引发PropertyChanged事件。例如,它可能会变成像SelectedTax = TaxList.FirstOrDefault(...这样的一行