Pregunta

Esta no es una pregunta, pero mi respuesta a un problema no pude encontrar una solución en Internet.

Tuve problemas para eliminar el SearchText en una aplicación MVVM Silverlight. Podía borrar el ceño seleccionado y el texto, pero el SearchText se dejó atrás. Se lee solo y no se puede cambiar por vinculación.

Ejemplo: AutocompleteBox con una lista de países. Cuando el usuario quiere ingresar a Australia, ingresa a 'AU' en este punto, la lista aparece en Austria y Australia. El usuario puede seleccionar Australia y seguir adelante. Al final de la edición, hacen clic en un botón 'Guardar'. En este punto, es probable que desee borrar los datos FORN para ingresar nuevos datos.

Incluso si tiene enlaces al SelectEitem y las propiedades de texto y las establece en 'NULL' y String.Epty, respectivamente, la propiedad de SearchText permanece y el AutocompleteBox no se borrará, pero contendrá 'Au'.

¿Fue útil?

Solución

Publiqué sobre esto en todo Internet, pero no pude obtener respuesta sobre el control en sí, por lo que llegué desde un ángulo diferente que puede ayudar a alguien que termina frustrado como yo.

Estoy usando una aplicación de plantilla de navegación de Silverlight que utiliza un margen de navegación para cargar páginas de Silverlight. Noté que si navegaba a otra página y volví a mi formulario de datos, se borra el SearchText. Cualquier valor que estuviera unido a las propiedades se mantuviera válidos, solo el SearchText había borrado en todos los cuadros de autocompletación. Por lo tanto, utilicé el método de Pageconductor para inyectar el marco de navegación en el Modelo ViewModel donde podría llamar al método de actualización. Obtuve este método de John Papa's ejemplo Desde el evento Silverlight Firestarter, simplemente agregué un método de actualización a la interfaz ipageConductor, por lo que ahora puedo llamar 'pageConductor.refresh ()', que es como recargar la página. Espero que esto ayude a alguien a salir.

Otros consejos

var t = ProductCombo.ItemsSource;
ProductCombo.ItemsSource = null;
ProductCombo.Text = string.Empty;
ProductCombo.SelectedValue = null;
//ProductCombo.Text = string.Empty;
ProductCombo.ItemsSource = t;

Prueba esto por favor. Funcionó para mi

Debe borrar la propiedad Bindeadead a Text Inside Set Parte de SelectedItem Binded Propiedad, como esta:

    public string AnalisisText
    {
        get { return _analisisText; }

        set
        {
            if (_analisisText == value)
            {
                return;
            }

            _analisisText = value;

            RaisePropertyChanged(AnalisisTextPropertyName);
        }
    }

    public DatosAutoCompletaPedidosDetalleViewDTO AnalisisSelect
    {
        get { return _analisisSelect; }

        set
        {
            if (_analisisSelect == value)
            {
                return;
            }


            _analisisSelect = value;

            if (_analisisSelect == null) AnalisisText = "";

            RaisePropertyChanged(AnalisisSelectPropertyName);
        }
    }

Entonces, cuando establece NULL en la propiedad seleccionada, la otra propiedad se establecerá en "".

La forma más fácil que he encontrado es extender la caja de autocomplete:

public class AutoCompleteBoxClear : AutoCompleteBox
{
    public AutoCompleteBoxClear()
    {
        DataContextChanged += (o, e) =>
        {                
            if (SelectedItem == null)
                Text = string.Empty;
        };
    }
}

Ahora use su nuevo control de AutocompleteBoxClear en su XAML.

Esto borra el texto solo cuando AutoCompleteBox DataContext cambia a NULL (es decir, el usuario hace clic en Agregar en la forma de datos).

Nota: Creo que DataContextChanged solo está disponible en Silverlight 5, pero supongo que cualquiera que todavía use Silverlight en estos días probablemente ya se hubiera actualizado ...

var t = productcombo.ItemsSource; ProductCombo.ItemsSource = null; Productcombo.text = string.empty; Productcombo.selectedValue = null; //Productcombo.text = string.empty; ProductCombo.ItemsSource = t;

Desafortunadamente, esto es código detrás y necesitaba una solución MVVM.

Recientemente tuve el mismo problema con mi aplicación WPF. Descubrí que la solución no es establecer el objeto unido a SelectionItem en NULL, sino a su valor predeterminado. Me tomó un tiempo resolver esto. Entonces, en tu ejemplo, no sería SelectedCountry = null, pero SelectedCountry = new SelectedCountry(). En este caso, el SearchText se borra también. Revise mi publicación SO sobre este asunto: AutocompleteBox no borra los trazos de teclado.

Seguro que la propiedad SearchText es de solo lectura, pero podemos obtener el componente infantil de AutocompleteBox:

var searchText = autoCompBox.GetChildByType<TextBox>(item => item.Name == "Text");

Y ahora podemos restablecer la búsqueda de SearchText a través de la propiedad de texto de TextBox-Component:

if (searchText != null) searchText.Text = string.Empty;

En C# 6.0 es más lacónicamente:

autoCompBox.GetChildByType<TextBox>(item => item.Name == "Text")?.Text = string.Empty;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top