2010-12-01 4 views
3

Мне нужно передать имя элемента управления методу в объекте безопасности, который возвращает логическое значение для свойства IsEnabled и другой метод, который возвращает его видимость (сложенная, скрытая или видимая). Эти оба должны быть проверены для целей разрешения.Привязка к кнопкам Свойства IsEnabled/Visibility с использованием x: Имя в качестве параметра в методе в коде для кода

Я попытался использовать 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

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

*** UPDATE

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

+0

Я попытался использовать конвертер, проблема, с которой я столкнулся, заключается в том, что конвертеру необходимо было передать объект безопасности для доступа к разрешениям. Я создал многозначный конвертер, который использует имя элемента управления и таблицу для разрешений. Я получаю эту ошибку, когда пытаюсь использовать конвертер: «Невозможно применить объект типа« System.Data ».DataTable ', чтобы напечатать «System.String». » – jes9582 2010-12-01 15:28:38

0

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

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

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

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

- НТН Dusty