es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

UWP IsNullOrEmptyStateTrigger no funciona para ListView.

El XAML a continuación es para una aplicación UWP que utiliza un VisualStateManager con un IsNullOrEmptyStateTrigger del paquete Microsoft.Toolkit.Uwp.UI. El disparador debería desactivar el botón cuando no se seleccionen elementos de la ListView. Sin embargo, el botón siempre permanece habilitado.

El SelectedItem de la ListView debería ser nulo cuando no se selecciona nada en la lista (cuando ejecutas la aplicación por primera vez). ¿Alguna idea?

Mi código se basa en gran medida en este ejemplo.

<page x:class=""UwpTriggerDemo.MainPage"" xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:local=""using:UwpTriggerDemo"" xmlns:d=""http://schemas.microsoft.com/expression/blend/2008"" xmlns:mc=""http://schemas.openxmlformats.org/markup-compatibility/2006"" xmlns:triggers=""using:Microsoft.Toolkit.Uwp.UI.Triggers"" mc:ignorable=""d"" background=""{ThemeResource" applicationpagebackgroundthemebrush}">=""></page><stackpanel>
        <visualstatemanager.visualstategroups>
            <visualstategroup x:name=""ListViewStates"">
                <visualstate x:name=""ListSomethingSelectedState""></visualstate>
                <visualstate x:name=""ListNothingSelectedState"">
                    <visualstate.statetriggers>
                        <triggers:isnulloremptystatetrigger value=""{Binding" selecteditem,="" elementname="myListView," mode="OneWay}"/">
                    </triggers:isnulloremptystatetrigger></visualstate.statetriggers>
                    <visualstate.setters>
                        <setter target=""myButton.IsEnabled"" value=""False""></setter>
                    </visualstate.setters>
                </visualstate>
            </visualstategroup>

        </visualstatemanager.visualstategroups>

        <listview x:name=""myListView"">
            <textblock text=""Item" 1"=""></textblock>
            <textblock text=""Item" 2"=""></textblock>
            <textblock text=""Item" 3"=""></textblock>
        </listview>
        <button x:name=""myButton"" content=""Click" me"=""></button>
    </stackpanel>


Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con este código XAML es que la propiedad Value del IsNullOrEmptyStateTrigger no está correctamente enlazada con la propiedad SelectedItem del ListView. Para solucionar esto, se debe actualizar el enlace para establecer explícitamente la propiedad TargetNullValue en true, lo que indica que un valor nulo debe ser tratado como verdadero para esta función del disparador. El código XAML actualizado debería verse así:

    <page x:class="UwpTriggerDemo.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:UwpTriggerDemo" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:triggers="using:Microsoft.Toolkit.Uwp.UI.Triggers" mc:ignorable="d" background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    
        <stackpanel>
            <visualstatemanager.visualstategroups>
                <visualstategroup x:name="ListViewStates">
                    <visualstate x:name="ListSomethingSelectedState"></visualstate>
                    <visualstate x:name="ListNothingSelectedState">
                        <visualstate.statetriggers>
                            <triggers:isnulloremptystatetrigger value="{Binding SelectedItem, ElementName=myListView, Mode=OneWay, TargetNullValue=True}"></triggers:isnulloremptystatetrigger>
                        </visualstate.statetriggers>
                        <visualstate.setters>
                            <setter target="myButton.IsEnabled" value="False"></setter>
                        </visualstate.setters>
                    </visualstate>
                </visualstategroup>
            </visualstatemanager.visualstategroups>
    
            <listview x:name="myListView">
                <textblock text="Elemento 1"></textblock>
                <textblock text="Elemento 2"></textblock>
                <textblock text="Elemento 3"></textblock>
            </listview>
            <button x:name="myButton" content="Haz clic aquí"></button>
        </stackpanel>
    </page>
    

    Con esta actualización, el IsNullOrEmptyStateTrigger debería deshabilitar correctamente myButton cuando no hay elementos seleccionados en el myListView.

Comments are closed.