La unión a los botones IsEnabled propiedades / Visibilidad usando sus x: Nombre como un parámetro en un método en el código subyacente

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

Pregunta

I que pasar en el nombre controles a un método en un objeto de seguridad que devuelve un valor booleano para la propiedad IsEnabled y otro método que devuelve su visibilidad (contraído, Hidden, o visible). Estos dos tienen que ser controlados con fines de permisos.

I han intentado usar un ObjectDataProvider pero todos los ejemplos muestran solamente la entrada del usuario a partir de un cuadro de texto para los parámetros. Específicamente necesito pasar un nombre de control al método basado fuera del botón x:. Propiedad Name

¿Cuál es la manera más simple y más eficiente de manejar este problema. Gracias de antemano.

ACTUALIZACIÓN: Estoy tratando de utilizar un convertidor y este es el método de conversión que se me ocurrió:

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (values != null)
        {
            DataTable tblPermissions = (DataTable)values[0];
            string sFunctionName = values[1].ToString();

            DataRow[] rows = tblPermissions.Select("fun_name = '" + sFunctionName + "'");
            if ((bool)rows[0]["fun_enable"])
                return true;
            else
                return false;
        }

        return string.Empty;
    }

La siguiente es la xaml:

                    <Button.IsEnabled>
                        <MultiBinding Converter="{StaticResource IsFunctionEnabledConverter}">
                            <Binding ElementName="{StaticResource PermissionsTable}" />
                            <Binding ElementName="btnSave" Path="Name" />
                        </MultiBinding>
                    </Button.IsEnabled>
¿Fue útil?

Solución

Se puede escribir un IValueConverter para hacer la llamada al método y pase el control de sí mismo utilizando {Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}}. En el método Convert a continuación, puede emitir el valor de controlar y acceder a la propiedad Name del control para pasar al método de seguridad. Al marcar la targetType se puede determinar si a la salida de un valor lógico (por IsEnabled) o enumeración visibilidad.

*** ACTUALIZACIÓN

Asumo que el recurso "PermissionTable" que se utiliza con la unión de su convertidor es en realidad el DataTable, sino que está tratando de usarlo como una cadena para identificar un elemento por su nombre como la fuente de encuadernación. Trate de usar Source="{StaticResource PermissionsTable}" lugar para pasar el recurso mismo DataTable.

Otros consejos

Puede haber diferentes maneras de abordar este problema, dependiendo de la forma en que ha Architected su aplicación. Si está utilizando puntos de vista de control del usuario y en función de código subyacente de la ruta más sencilla puede ser la de llamar a los métodos del objeto de seguridad directamente desde el código subyacente y propiedades ajustan directamente en los controles en cuestión.

Si estás usando MVVM o no eres más que un fan de código subyacente, otra forma de evitar este problema puede ser para deshacerse de usar el nombre del botón e ir con un propiedad adjunta . propiedades adjuntas son una manera de utilizar el marco propiedad de dependencia de WPF para almacenar datos acerca de un objeto o de control que el objeto o el control no declararon originalmente en sí.

Además de las propiedades asociadas trata de un concepto llamado comportamientos adjuntos. En esencia, cuando se crea una propiedad adjunta, se le ofrece un gancho para una devolución de llamada que se llama cada vez que la propiedad se establece en un objeto. Cuando esta devolución de llamada, recibirá el objeto de la propiedad se estableció en, así como los valores nuevos y antiguos para la propiedad.

Se puede usar la devolución de llamada como una oportunidad para comprobar el valor de la propiedad en contra de su objeto de seguridad y establecer las propiedades habilitados y visibles como mejor le parezca.

- HTH Dusty

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