我在 wpf 用户控件中有一个文本框和一个组合框。ComboxBox 绑定到 ICollectionView (CurencyList),它填充货币对,如 GBP/EUR、CLP/EUR、USD/EUR、EUR/USD 等。每当用户在文本框中写入(例如 EUR)时,组合框应被过滤并显示下拉列表,其中 EUR 为第二种货币。
为此,我使用过:
public string Currency
{
get {
return _criteriaType.currency; }
set
{
if (_criteriaType.currency != value)
{
_criteriaType.currency = value.EmptyOrWhiteSpaceAsNull();
base.OnPropertyChanged("Currency");
CurrencyList.Filter = new Predicate<object>(Contains);
}
}
}
public bool Contains(object de)
{
CurrencyPair o = de as CurrencyPair;
if (Currency != null || Currency == string.Empty)
{
return (o.name.Substring(3, 4).ToLower().Contains(Currency.ToLower()));
}
else
{
IsOpen = false;
OnPropertyChanged("IsOpen");
return false;
}
}
CurrencyList 来自网络服务:
private ICollectionView GetCurrencyPair()
{
strCurrencyPair.arg0 = (Currency != string.Empty && Currency != null) ? Convert.ToString(Currency).ToUpper() : string.Empty;
string[][] cPair = ServiceLocator.Resolve<IWebServiceRepository>().BusinessWebService.getCurrenyPairs(strCurrencyPair);
foreach (string[] item in cPair)
{
IList.Add(new CurrencyPair() { name = (Convert.ToString(item[0]).ToUpper() + "/" + Convert.ToString(item[1]).ToUpper()) });
}
return CurrencyList =CollectionViewSource.GetDefaultView(IList);
}
过滤工作正常。但是当用户使用键盘上的向后箭头键从文本框中删除货币时,组合框被过滤为空,即下拉列表为空。如何克服这个问题。请建议?