WPF组合框 - 通过绑定设置文本,而控件具有焦点

时间:2015-10-30 14:20:58

标签: c# wpf xaml combobox

好的,我放弃了,需要一些帮助。

我很难让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本身中显示的值。

有什么想法吗?

0 个答案:

没有答案