Привязка кнопки к свойствам IsEnabled / Visibility с использованием ее x: Name в качестве параметра метода в выделенном фрагменте - PullRequest
3 голосов
/ 01 декабря 2010

Мне нужно передать имя элемента управления методу в объекте безопасности, который возвращает логическое значение для свойства IsEnabled, и другому методу, который возвращает его Visibility (Collapsed, Hidden или Visible). Оба они должны быть проверены в целях разрешения.

Я пытался использовать ObjectDataProvider, но все примеры показывают только пользовательский ввод из текстового поля для параметров. Мне нужно передать имя элемента управления методу, основанному на свойстве кнопки x: Name.

Какой самый простой и эффективный способ решения этой проблемы. Заранее спасибо.

UPDATE: Я пытаюсь использовать конвертер, и это метод конвертации, который я придумал:

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

xaml:

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

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

Вы можете написать IValueConverter, чтобы выполнить вызов метода и передать сам элемент управления, используя {Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}}. В методе Convert вы можете затем преобразовать значение в Control и получить доступ к свойству Name элемента управления для передачи в метод безопасности. Проверяя targetType, вы можете определить, выводить ли логическое (для IsEnabled) или перечисление Visibility.

*** UPDATE

Я предполагаю, что ресурс PermissionTable, используемый с привязкой вашего конвертера, на самом деле является DataTable, но вы пытаетесь использовать его в качестве строки для идентификации элемента по имени в качестве источника привязки. Попробуйте вместо этого Source="{StaticResource PermissionsTable}" передать сам ресурс DataTable.

0 голосов
/ 01 декабря 2010

Могут быть разные способы решения этой проблемы в зависимости от того, как вы спроектировали свое приложение. Если вы используете представления пользовательского элемента управления и, в зависимости от кода, вашим самым простым маршрутом может быть вызов методов объекта безопасности непосредственно из кода и установка свойств непосредственно для рассматриваемых элементов управления.

Если вы используете MVVM или просто не являетесь поклонником кода, другой способ обойти эту проблему может заключаться в том, чтобы отказаться от использования имени кнопки и перейти к присоединенному свойству . Присоединенные свойства - это способ использования структуры свойств зависимостей WPF для хранения данных об объекте или элементе управления, которые объект или элемент управления изначально не объявили сами.

Наряду с прикрепленными свойствами появляется концепция, называемая прикрепленным поведением. По сути, когда вы создаете присоединенное свойство, вы получаете ловушку для обратного вызова, который вызывается всякий раз, когда свойство устанавливается для объекта. Когда вызывается этот обратный вызов, вы получаете объект, для которого было установлено свойство, а также новые и старые значения свойства.

Вы можете использовать обратный вызов как возможность проверить значение свойства по отношению к вашему объекту безопасности и установить включенные и видимые свойства по своему усмотрению.

- HTH Дасти

...