Binding un pulsanti IsEnabled proprietà / visibilità utilizzando i suoi x: Name come parametro in un metodo nel code-behind

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

Domanda

ho bisogno di passare nel nome di controlli a un metodo in un oggetto di sicurezza che restituisce un valore booleano per la proprietà IsEnabled e un altro metodo che restituisce la sua visibilità (Compresso, nascosto o visibile). Questi entrambi devono essere controllati a fini di autorizzazione.

Ho provato con un ObjectDataProvider ma tutti gli esempi mostrano solo input dell'utente da una casella di testo per i parametri. In particolare mi bisogno di passare un nome di controllo per il metodo in base al largo x del pulsante:. Nome proprietà

Qual è il modo più semplice ed efficace di gestire questo problema. Grazie in anticipo.

UPDATE: Sto cercando di utilizzare un convertitore e questo è il metodo Convert mi si avvicinò con:

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

Il seguente è il codice XAML:

                    <Button.IsEnabled>
                        <MultiBinding Converter="{StaticResource IsFunctionEnabledConverter}">
                            <Binding ElementName="{StaticResource PermissionsTable}" />
                            <Binding ElementName="btnSave" Path="Name" />
                        </MultiBinding>
                    </Button.IsEnabled>
È stato utile?

Soluzione

È possibile scrivere un IValueConverter per effettuare la chiamata al metodo e passare il controllo di se stesso utilizzando {Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}}. Nel metodo Convert è possibile lanciare il valore di controllare e accedere alla proprietà il nome del controllo da passare al metodo di protezione. Controllando il targetType è possibile determinare se emettere un valore booleano (per IsEnabled) o la visibilità enum.

*** AGGIORNAMENTO

Presumo che la risorsa "PermissionTable" usato con rilegatura il convertitore è in realtà la DataTable, ma si sta cercando di usarlo come una stringa per identificare un elemento per nome come la fonte di rilegatura. Provare a utilizzare Source="{StaticResource PermissionsTable}" invece di passare la risorsa DataTable sé.

Altri suggerimenti

Ci possono essere diversi modi per affrontare questo problema a seconda del modo in cui hai architettato l'applicazione. Se stai usando una vista e dei comandi a seconda code-behind il percorso più semplice potrebbe essere quella di chiamare i metodi dell'oggetto di sicurezza direttamente dal codice dietro e le proprietà sorge direttamente sulle controlli in questione.

Se stai usando MVVM o non sei solo un fan di code-behind, un altro modo per aggirare questo problema potrebbe essere quella di abbandonare utilizzando il nome del pulsante e andare con un proprietà associata . proprietà associate sono un modo di usare il quadro proprietà di dipendenza WPF per memorizzare i dati su un oggetto o di controllo che l'oggetto o il controllo non originariamente dichiararsi.

Insieme con proprietà associate deriva un concetto chiamato comportamenti collegati. In sostanza, quando si crea una proprietà allegato, si è dato un gancio per un callback che si chiama ogni volta che la proprietà è impostata su un oggetto. Quando questo callback viene chiamata, si riceve l'oggetto la proprietà è stata impostata su, così come i valori vecchi e nuovi per la proprietà.

È possibile utilizzare la richiamata come un'opportunità per verificare il valore della proprietà contro il vostro oggetto di sicurezza e impostare le proprietà abilitati e visibili, come si vede in forma.

- HTH Dusty

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top