2010-12-01 2 views
3

IsEnabled 속성에 대한 부울 값을 반환하는 보안 개체의 메서드에 컨트롤 이름을 전달해야합니다. Visibility (Collapsed, Hidden 또는 Visible)를 반환하는 또 다른 메서드가 있습니다. 이 두 가지 모두 허가 목적으로 검사해야합니다.단추 바인딩 IsEnabled/Visibility 속성 x : Name을 코드 숨김의 메서드에서 매개 변수로 사용

ObjectDataProvider를 사용해 보았지만 모든 예제는 텍스트 상자의 매개 변수에 대한 사용자 입력 만 보여줍니다. 단추의 x : Name 속성을 기반으로 메서드에 컨트롤 이름을 전달해야합니다.

이 문제를 처리하는 가장 간단하고 효율적인 방법은 무엇입니까? 미리 감사드립니다.

업데이트 : 나는 변환기를 사용하려고이 내가 해낸 변환 방법 :

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

답변

2

. Convert 메서드에서 값을 Control로 변환하고 Control의 Name 속성에 액세스하여 보안 메서드에 전달할 수 있습니다. targetType을 검사하여 boolean (IsEnabled의 경우) 또는 Visibility enum을 출력할지 여부를 결정할 수 있습니다.

*** 나는 당신의 컨버터가 결합에 사용되는 "PermissionTable"자원이 실제로 DataTable에 있다고 가정하지만 당신은 바인딩 소스로 이름 요소를 식별하는 문자열로 사용하려는 UPDATE

. 대신 Source="{StaticResource PermissionsTable}"을 사용하여 DataTable 리소스 자체를 전달하십시오.

+0

나는 변환기를 사용하려고 시도했다. 문제는 내가 변환기가 권한에 액세스하기 위해 보안 개체를 전달해야한다는 것이다. 컨트롤 이름과 사용 권한 테이블을 사용하는 다중 값 변환기를 만들었습니다. 시도하고 변환기를 사용할 때이 오류가 나타납니다. "형식의 개체를 캐스팅 할 수 없습니다 'System.Data.DataTable ''System.String '을 입력하십시오. " – jes9582

+0

그냥 잘못된 값으로 [] 값에서 항목을 꺼내는 변환기 코드 문제가있는 것처럼 들리지만 정확히 코드를 보지 않고 무엇을 말할 수 없는지 –

+0

게시했습니다. 원래 질문의 코드 샘플, 내가 잘못 본 것이 있으면 알려주지 만 그들은 올바른 순서로 있어야합니다. 감사합니다 – jes9582

0

가있을 수 있습니다 :

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입니다 애플리케이션을 설계 한 방식에 따라이 문제에 접근하는 여러 가지 방법. 사용자 컨트롤 뷰를 사용하고 있고 코드 숨김에 따라 가장 쉬운 방법은 코드 뒤에있는 보안 개체의 메서드를 직접 호출하고 문제의 컨트롤에 직접 속성을 설정하는 것입니다.

MVVM을 사용하고 있거나 코드 숨김 팬이 아닌 경우이 문제를 해결하는 또 다른 방법은 버튼 이름을 사용하여 도랑을 말아서 attached property으로 이동하는 것입니다. 연결된 속성은 WPF 종속성 속성 프레임 워크를 사용하여 개체 또는 컨트롤이 원래 선언하지 않았던 개체 또는 컨트롤에 대한 데이터를 저장하는 방법입니다.

첨부 된 속성과 함께 첨부 된 동작이라는 개념이 있습니다. 기본적으로 첨부 된 속성을 만들면 해당 속성이 객체에 설정 될 때마다 호출되는 콜백에 대한 후크가 제공됩니다. 이 콜백이 호출되면 속성이 설정된 객체뿐만 아니라 속성의 새 값과 이전 값을받습니다.

보안 개체에 대한 속성 값을 확인하고 사용 가능한 속성과 보이는 속성을 적합하게 설정할 수있는 기회로 콜백을 사용할 수 있습니다.

- HTH 먼지

당신은 메서드 호출을하고 그 자체가 {Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}}를 사용하여 컨트롤을 전달하는 IValueConverter를 작성할 수