AutoCompleteBox中的ValueMemberPath绑定WPF仅返回姓氏搜索中的最高结果?

Dre*_*rew 2 wpf autocompletebox

我一直在WPF工具包中使用AutoCompleteBox,它只是满足我的所有需求,除了这个麻烦的ValueMemberPath绑定.这是建议框将自动完成的值.

所以我有这个姓氏字段,当用户开始输入姓氏时,我会根据它动态检索前10个结果.但是,如果用户键入"Smith"并选择列出列表中的第4个名称,它总是检索建议列表中的第一个结果,因为ValueMemberPath设置为filter by LastName.它始终只是认为"史密斯"是第一个结果,即使有50个不同名字的史密斯.

我一直在试图弄清楚如何将名字与这个属性结合起来.我试图将其更改ValueMemberPathFullName等于姓氏和名字的字段.一旦输入逗号,建议框就会停止排序,或者如果它是名字'space',那么它也不起作用.

我也遇到了问题,ValueMemberPath因为这个值无法动态更改,并且在调试时存在null的错误:AutoCompleteBox错误:ValueMemberPath为Null.

我理解,如果没有人有完整的解决方案.我只是觉得我会问这个问题,以防将来人们遇到这个问题,我不知道如何处理这个问题.

Ric*_*key 5

这是一个错误AutoCompleteBox.控件内部使用名为的类型实现ValueMemberPathValueMemberBinding属性BindingEvaluator.这个类是FrameworkElementAutoCompleteBox用途做间接值绑定.

问题是当a BindingEvaluator与逻辑树断开连接时,绑定不起作用.以下是如何AutoCompleteBox管理它BindingEvaluator以使其工作:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    DataContext = new { FirstName = "Bill", LastName = "Smith" };
    var valueBindingEvaluator = new BindingEvaluator<string>();
    AddLogicalChild(valueBindingEvaluator);
    valueBindingEvaluator.ValueBinding = new Binding("FirstName");
    var value = valueBindingEvaluator.GetDynamicValue(DataContext);
}
Run Code Online (Sandbox Code Playgroud)

如果您愿意自己重新编译WPF工具包,这是一个非常容易修复的错误.

public Binding ValueMemberBinding
{
    get
    {
        return _valueBindingEvaluator != null ?
            _valueBindingEvaluator.ValueBinding : null;
    }
    set
    {
        if (_valueBindingEvaluator == null)
        {
            _valueBindingEvaluator = new BindingEvaluator<string>();
            AddLogicalChild(_valueBindingEvaluator);
        }
        _valueBindingEvaluator.ValueBinding = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

这也解决了您链接的错误.