Dre*_*rew 2 wpf autocompletebox
我一直在WPF工具包中使用AutoCompleteBox,它只是满足我的所有需求,除了这个麻烦的ValueMemberPath绑定.这是建议框将自动完成的值.
所以我有这个姓氏字段,当用户开始输入姓氏时,我会根据它动态检索前10个结果.但是,如果用户键入"Smith"并选择列出列表中的第4个名称,它总是检索建议列表中的第一个结果,因为ValueMemberPath设置为filter by LastName.它始终只是认为"史密斯"是第一个结果,即使有50个不同名字的史密斯.
我一直在试图弄清楚如何将名字与这个属性结合起来.我试图将其更改ValueMemberPath为FullName等于姓氏和名字的字段.一旦输入逗号,建议框就会停止排序,或者如果它是名字'space',那么它也不起作用.
我也遇到了问题,ValueMemberPath因为这个值无法动态更改,并且在调试时存在null的错误:AutoCompleteBox错误:ValueMemberPath为Null.
我理解,如果没有人有完整的解决方案.我只是觉得我会问这个问题,以防将来人们遇到这个问题,我不知道如何处理这个问题.
这是一个错误AutoCompleteBox.控件内部使用名为的类型实现ValueMemberPath和ValueMemberBinding属性BindingEvaluator.这个类是FrameworkElement将AutoCompleteBox用途做间接值绑定.
问题是当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)
这也解决了您链接的错误.
| 归档时间: |
|
| 查看次数: |
3117 次 |
| 最近记录: |