ValueMemberPath Encuadernación en AutoCompleteBox WPF sólo devuelve la parte superior resultado de la última búsqueda el nombre?

StackOverflow https://stackoverflow.com/questions/4648527

  •  09-10-2019
  •  | 
  •  

Pregunta

He estado usando AutoCompleteBox en el kit de herramientas de WPF y casi cumple con todas mis necesidades, todos excepto esta unión ValueMemberPath problemático. Este es el valor que el cuadro sugieren voluntad auto completo por.

Así que tengo este último campo de nombre, y cuando un usuario comienza a escribir en un último nombre, yo dinámica Encuentre los mejores 10 resultados en base a eso. Sin embargo, si el usuario escribe en 'Smith' y selecciona dicen que el cuarto nombre en la lista, siempre se recupera el primer resultado en la lista de sugerencias, porque ValueMemberPath se establece en el filtro por LastName. Siempre sólo piensa "Smith" es el primer resultado, incluso si hay 50 Smiths con diferentes nombres.

He estado devanando mi cerebro tratando de averiguar cómo incorporar primero nombre con esta propiedad. He intentado cambiar ValueMemberPath a ser un campo FullName que igualó apellido y apellido. La sugieren cuadro de clasificación se detiene tan pronto como se introduce una coma, o si es nombre apellido 'espacio' que no funciona bien.

También encontré con problemas con ValueMemberPath ya que este valor no se puede cambiar de forma dinámica, y no hay error en el que es nula durante la depuración: AutoCompleteBox Bug:. ValueMemberPath es Null

Me entender si nadie tiene una solución completa. Yo sólo pensaba que iba a hacer la pregunta en caso de que las personas se producen en el futuro y no estoy seguro de cómo manejar esto.

¿Fue útil?

Solución

Esto es un error en el AutoCompleteBox. Interna para el control de las propiedades ValueMemberPath y ValueMemberBinding se implementan utilizando un tipo llamado BindingEvaluator. Esta clase es una FrameworkElement que los usos que se pueden hacer AutoCompleteBox valor indirecto vinculante.

El problema es que cuando un BindingEvaluator está desconectado del árbol lógico, la unión no funciona. Aquí es cómo AutoCompleteBox necesita para gestionar su BindingEvaluator con el fin de que funcione:

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);
}

Esto es un error bastante fácil de solucionar si usted está dispuesto a volver a compilar el WPF Toolkit mismo.

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

Esto también corrige el error se ha vinculado a.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top