gpt4 book ai didi

wpf - 如何 bool 值&& 两个可见性转换器

转载 作者:行者123 更新时间:2023-12-03 08:34:01 25 4
gpt4 key购买 nike

我有两个单独的可见性转换器,一个基于字段是否已更新,另一个基于是否允许查看字段。我对页面上的每个文本项使用了 updatedField ,以便在更新的字段旁边显示一颗星。但某些文本项仅对某些用户可见,具体取决于权限级别。

例如:

<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}}" />

我的问题是,对于需要许可的字段,我需要运行两个转换器来确定星星是否出现。有没有办法对两个转换器的结果执行 bool 值“And”?

我看了 this post但它似乎不允许将不同的参数集传递给两个不同的转换器。

- - - -更新 - - - -

我还尝试用这个 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>

但是当它进入转换器时,两个值都是“DependencyProperty.UnsetValue”。所以我显然在这里做错了什么。

- - - - 解决方案 - - - - -

我不得不修改这个,但后来它起作用了。
<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();
}
}

关于wpf - 如何 bool 值&& 两个可见性转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6501970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com