Pregunta

Necesito tener un controlador de comandos para un ToggleButton que pueda tomar múltiples parámetros, a saber, la propiedad ISCECKED de dicho ToggleButton, junto con un valor constante, que podría ser una cadena, byte, int ... no importa.

encontré esta gran pregunta en y siguió el enlace de la respuesta y lee en multibinding y imultivalUeconverter. Fui muy bien hasta que tuve que escribir la multibinding, cuando me di cuenta de que también necesito pasar un valor constante y no podía hacer algo como

<Binding Value="1" />

Entonces me encontré con otro Pregunta similar que Kent Boogaart respondió, y luego comencé a pensar en las formas en que podría evitar esto.

Una forma posible es no usar MVVM y simplemente agregar la propiedad de la etiqueta a mi ToggleButton, en cuyo caso mi multibinding se vería así:

<MultiBinding Converter="{StaticResource MyConverter}">
    <MultiBinding.Bindings>
        <Binding Path="IsChecked" />
        <Binding Path="Tag" />
    </MultiBinding.Bindings>
</MultiBinding>

Kent había hecho un comentario en la línea de "Si está usando MVVM, debería poder solucionar este problema". Sin embargo, no estoy seguro de que sea una opción para mí, a pesar de que he adoptado MVVM como mi patrón WPF de necesidad elección.

La razón por la que digo esto es que tengo más de un togglebutton en el UserControl, y cada uno de los comandos de ToggleButtons debe llamar a la misma función. Pero dado que son ToggleButtons, no puedo usar la propiedad vinculada a Ischecked en el modelado View, porque no sé en qué se hizo clic por última vez. Supongo que podría agregar otra propiedad privada para realizar un seguimiento de esto, pero parece un poco tonto. En cuanto a la constante, probablemente podría deshacerme de esto si hiciera la idea de seguimiento, pero no estoy seguro de ninguna otra forma de evitarlo.

¿Alguien tiene buenas sugerencias para mí aquí? :)

EDITAR - OK, entonces necesito actualizar mis enlaces, que aún no funcionan bien:

    <ToggleButton Tag="1" Command="{Binding MyCommand}" Style="{StaticResource PassFailToggleButtonStyle}" HorizontalContentAlignment="Center" Background="Transparent" BorderBrush="Transparent" BorderThickness="0">
        <ToggleButton.CommandParameter>
            <MultiBinding Converter="{StaticResource MyConverter}">
                <MultiBinding.Bindings>
                    <Binding Path="IsChecked" RelativeSource="{RelativeSource Mode=Self}" />
                    <Binding Path="Tag" RelativeSource="{RelativeSource Mode=Self}" />
                </MultiBinding.Bindings>
            </MultiBinding>
        </ToggleButton.CommandParameter>
    </ToggleButton>

Ischecked estaba funcionando, pero no etiqueta. Me acabo de dar cuenta de que la etiqueta es una cadena ... duh. ¡Está funcionando ahora! La clave era usar una fuente de familiares de Uno mismo.

¿Fue útil?

Solución

Como se explicó anteriormente, lo descubrí. Tuve que usar Self por RelativeSource Y eso hizo el truco.

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