특정 열거 형 값을 기반으로 UIElement의 표시 여부를 설정하기 위해 연결된 속성을 만들었습니다. 이것은 잘 작동합니다. 그러나 발신자의 "상태"를 기준으로 표시 여부를 재정의 할 수 있도록 확장해야합니다.WPF - 연결된 속성이 다른 바운드 연결된 속성을 참조해야합니다.
어떻게하면됩니까? 나는 첨부 된 첫 번째 속성이 참조 할 수있는 다른 연결된 속성을 만들 수 있다고 생각했지만 enum 값으로 설정하는 대신 두 번째 연결된 속성에 값을 바인딩 할 수 있어야합니다.
편집 아래
내 문제의 예입니다
<Window x:Class="AttachedProperty.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:attachedProperty="clr-namespace:AttachedProperty"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<TextBlock Text="Button should be enabled?"/>
<CheckBox IsChecked="{Binding Path=CanClick}"/>
<Button Content="Click Me" IsEnabled="{Binding Path=CanClick}"/>
<Button Content="Manager Only Click" attachedProperty:SecurityBehavior.IsEnabledRole="Mgr"/>
</StackPanel>
</Grid>
첫 번째 버튼의 enabled 속성은 체크 박스를 사용하여 제어된다. 1을 확인란이 선택되어 있기 때문에 두 번째 난을이기 때문에 - 두 버튼이 활성화 실행하면
public class SecurityBehavior
{
public static readonly DependencyProperty IsEnabledRoleProperty = DependencyProperty.RegisterAttached(
"IsEnabledRole", typeof (string), typeof (SecurityBehavior), new UIPropertyMetadata(OnIsEnabledRoleChanged));
private static void OnIsEnabledRoleChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
// In here have some logic that determines if the current user is authorised
// Principal.IsInRole(e.NewValue.ToString() ? true : false;
sender.SetValue(UIElement.IsEnabledProperty, true);
}
public static void SetIsEnabledRole(DependencyObject element, string value)
{
element.SetValue(IsEnabledRoleProperty, value);
}
public static string GetIsEnabledRole(DependencyObject element)
{
return (string) element.GetValue(IsEnabledRoleProperty);
}
}
: 두 번째 버튼의 enabled 속성이 올바른 보안 그룹에있는 경우 결정하는 attachedProperty에 의해 제어됩니다 매니저. 확인란의 선택을 취소하면 첫 번째 버튼이 비활성화되고 올바른 보안 그룹에있는 경우에만 첨부 된 속성을 활성화 할 수 있습니다. 및 확인란이 선택되어 있습니다.
2 가지 입력을 기반으로 IsEnabled를 설정하는 동작을 얻을 수 있도록 샘플별로 어떻게 바꿀 수 있습니까?
난 당신이 제안으로 계산기를 사용할 수 있지만, 컨버터가 나는 그것이 XAML을 할 것이라고 생각 일 것이다하지만이 필요 할 것이다 많은 다른 장소가 될 것입니다 기능이 첨부 된 속성/첨부 된 동작으로 래핑 될 수있는 경우 클리너 –
가능한 경우 xaml에 UI 관련 항목을 많이 유지하는 것을 선호합니다. 당신은 언제나베이스 스타일을 정의 할 수 있으며 복제를 줄이기 원한다면 속성을 할당 할 수 있습니다. 이 물건들에 붙어있는 속성들에 매료되지 않았습니다. 그래서 우리는 Binding과 MultiBinding 및 변환기를 처음부터 가지고 있습니다. – Viv
@DavidWard 제 대답을 편집하고 첨부 된 속성을 사용하여 찾고 있던 대답을 제공했습니다. :) 다른 옵션도 고려해보십시오 :) – Viv