부울 및 두 개의 가시성 변환기를 사용하는 방법
하나는 필드가 업데이트되었는지 여부를 기준으로 하고 다른 하나는 필드를 볼 수 있는지 여부를 기준으로 하는 두 개의 별도 변환기가 있습니다.업데이트된 필드 옆에 별표가 나타나도록 페이지의 각 텍스트 항목에 대해 업데이트된 필드 하나를 사용합니다.그러나 일부 텍스트 항목은 권한 수준에 따라 일부 사용자만 볼 수 있습니다.
예:
<Image Visibility="{Binding ElementName=MyObject, Path=UpdatedFields, Mode=OneWay, Converter={StaticResource updatedFieldConverter}, ConverterParameter=FieldToTest}" Source="Properties:Resources.star_yellow" />
그리고.
<TextBlock FontSize="21" Foreground="{DynamicResource LabelBrush}" Text="{x:Static Properties:Resources.Some_Text}" Visibility="{Binding Source={StaticResource allowedFields}, Path=Some_Text_Field, Converter={StaticResource visibilityConverter}}" />
문제는 권한이 필요한 필드의 경우 두 변환기를 모두 실행하여 별이 나타나는지 확인해야 한다는 것입니다.두 변환기의 결과에 대해 부울 "And"를 수행할 수 있는 방법이 있습니까?
저는 이 게시물을 보았지만 두 개의 서로 다른 변환기에 서로 다른 매개 변수 집합이 전달되는 것을 허용하지 않는 것 같습니다.
-------업데이트-------
저는 또한 이 xaml로 MultiValueConverter를 만들려고 했습니다.
<Image Grid.Row="4" Grid.Column="0" Source="star_yellow.png">
<Image.Visibility>
<MultiBinding Converter="{StaticResource combinedVisibilityConverter}" ConverterParameter="FieldToTest" >
<Binding ElementName="allowedFieldsModel" Path="Some_Text_Field" Mode="OneWay" />
<Binding ElementName="MyObject" Path="UpdatedFields" Mode="OneWay" />
</MultiBinding>
</Image.Visibility>
</Image>
그러나 변환기에 들어가면 두 값 모두 "Dependency Property"가 됩니다.값을 설정 취소합니다.그래서 제가 여기서 뭔가 잘못하고 있는 것 같습니다.
------솔루션---------
저는 이것을 수정해야 했지만, 그 후 효과가 있었습니다.
<Image.Visibility>
<MultiBinding Converter="{StaticResource combinedVisibilityConverter}" ConverterParameter="FieldToTest">
<Binding Source="{StaticResource allowedFieldsModel}" Path="Some_Text_Field" />
<Binding Path="MyObject.UpdatedFields" />
</MultiBinding>
</Image.Visibility>
MultiBinding은 손으로 만든 짧은 IMultiValueConverter와 함께 사용할 수 있습니다.
예:
<StackPanel>
<StackPanel.Resources>
<local:MultiBooleanToVisibilityConverter x:Key="Converter" />
</StackPanel.Resources>
<CheckBox x:Name="Box1" />
<CheckBox x:Name="Box2" />
<TextBlock Text="Hidden Text">
<TextBlock.Visibility>
<MultiBinding Converter="{StaticResource Converter}">
<Binding ElementName="Box1"
Path="IsChecked" />
<Binding ElementName="Box2"
Path="IsChecked" />
</MultiBinding>
</TextBlock.Visibility>
</TextBlock>
</StackPanel>
그리고 변환기는...
class MultiBooleanToVisibilityConverter : IMultiValueConverter
{
public object Convert(object[] values,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
bool visible = true;
foreach (object value in values)
if (value is bool)
visible = visible && (bool)value;
if (visible)
return System.Windows.Visibility.Visible;
else
return System.Windows.Visibility.Hidden;
}
public object[] ConvertBack(object value,
Type[] targetTypes,
object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
파티에 늦었지만 더 쉬운 해결책은 컨트롤을 다른 컨트롤로 포장하는 것입니다.저는 이것이 다른 일을 하는 많은 변환기보다 더 좋습니다.
<Border Visibility="{Binding Value1, Converter={convertersDF:Converter_ValueToVisibility}}">
<ComboBox Visibility="{Binding Value2, Converter={convertersDF:Converter_ValueToVisibility}}"/>
</Border>
한 가지 생각나는 것은 아마도 두 개의 다른 부울 필드 대신 updateField와 allowedField를 함께 ORing하여 만든 단일 비트 필드입니다.그러면 세 개의 값 변환기가 모두 동일한 필드에서 작동할 수 있습니다.
또는 데이터 모델에서 AND를 수행하는 다른 필드를 계산합니다.런타임 측면에서 볼 때 아마도 더 효율적일 것입니다.
두 개체의 배열을 변환기에 전달할 수 있습니다.ConverterParameter
XAML에서 어레이를 구성합니다.
언급URL : https://stackoverflow.com/questions/6501970/how-to-boolean-two-visibility-converters
'programing' 카테고리의 다른 글
sql을 사용하여 날짜 필드에서 월별로 그룹화하는 방법 (0) | 2023.04.28 |
---|---|
Bash의 단일 행 동안 루프 구문 (0) | 2023.04.28 |
Xcode 6 이상에서 카테고리를 만들려면 어떻게 해야 합니까? (0) | 2023.04.28 |
스크립트 자체 내에서 Bash 스크립트가 있는 디렉토리를 가져오려면 어떻게 해야 합니까? (0) | 2023.04.28 |
어레이의 퍼포먼스와리스트 (0) | 2023.04.23 |