好的,我放弃了,需要一些帮助。
我很难让WPF ComboBox按照我的意愿行事!为了简要描述这个问题,我有一个ComboBox,当用户在其中输入内容时,它会限制其内容。因此,例如,当他们在框中键入C时,ComboBox的项目仅限于以C开头的内容。一切都很好。我遇到的麻烦是,当盒子里只剩下一个选项时,我想要选择剩下的唯一项目,并将ComboBox的文本设置为该项目。它可以很好地选择项目,但我无法根据需要更新ComboBox的文本。这是ComboBox的XAML:
companyEmps IMap
text属性的代码如下:
<ComboBox x:Name="CustomerBox" IsEditable="True" ItemsSource="{Binding Customers}"
SelectedItem="{Binding SelectedCustomer, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValue="{Binding SelectedCustomer.AccountCode, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="AccountCode"
Text="{Binding CustomerBoxText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
PreviewKeyDown="CustomerBox_PreviewKeyDown">
GetCustomerData通过更改组合框绑定的Customers集合来限制框的内容。这是代码:
private string _customerBoxText;
public string CustomerBoxText
{
get
{
return _customerBoxText;
}
set
{
if (_customerBoxText != value)
{
_customerBoxText = value;
GetCustomerData(value);
}
OnPropertyChanged("CustomerBoxText");
}
}
我还没有完成它,所以这是正在进行的代码。我遇到的麻烦在于本节:
private void GetCustomerData(string accountCode = "")
{
List<Customer> customers = (Helpers.DataStorage.Instance.GetData<Customer>(accountCode) as List<Customer>).OrderBy(x => x.AccountCode).ToList();
this.Customers = new ObservableCollection<Customer>(customers);
// If only 1 item in list then we make it the selected item
if (this.Customers.Count == 1)
{
SelectedCustomer = Customers[0];
CustomerBoxText = SelectedCustomer.AccountCode;
}
else
{
SelectedCustomer = Customers.FirstOrDefault(c => c.AccountCode == accountCode);
}
}
SelectedCustomer已经足够好了,我可以看到其他绑定中的值。但是,正在更新的CustomerBoxText不会更新ComboBox中键入的值。我已经使用snoop来确认Text属性是期望的值,但它不是ComboBox本身中显示的值。
有什么想法吗?