-1

我有一个典型的标签,我想通过一个是否为空/空的属性来控制它的可见性。

我已经放了断点并记录了,似乎返回值是真的,但它仍然没有显示元素。当我滚动我的列表视图时,它们是可见的,但有时仍然不可见.. 有几个项目,有时其中一些可见,有时不可见.. 它是可变的.. 这是
我的转换器

public class TestBooleanConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var result=  value != null && !value.ToString().Equals("");
        Console.WriteLine("Result: " +result);
        return result;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

和财产

    public string LocalizedReadoutDescription
    {
        get
        {
            Console.WriteLine("Description: " + dataItem.Description);
            string localizedDescription = null;
            if (!string.IsNullOrEmpty(this.dataItem.Description))
            {
                string[] descriptionKeyParts = this.dataItem.Description.Split(';');
                localizedDescription = descriptionKeyParts[0];
                if (!string.IsNullOrEmpty(localizedDescription))
                {
                    localizedDescription = 
                   this.getLocalizedString(Constants.Localization.LogicalItemDescriptionFmt, 
                     localizedDescription);
                }
            }

            return localizedDescription;
        }
    }

和 Xaml 代码

<ContentView.Resources>
  <converters:TestBooleanConverter x:Key="nullToBoolConverter"/>
   .....
</ContentView.Resources>

    .....

<StackLayout Orientation="Horizontal" Margin="4,2" Grid.Column="1"  VerticalOptions="StartAndExpand" 
 HorizontalOptions="FillAndExpand" Spacing="0" BackgroundColor="White">
       <StackLayout.GestureRecognizers>
          <TapGestureRecognizer Tapped="Help_Tapped" CommandParameter="{Binding}"/>
       </StackLayout.GestureRecognizers>
       <Label x:Name="HelpLabel" Style="{StaticResource InfoIconLabel}" Text="{x:Static resx:UI.Icon_Info}" Margin="0" 
        HorizontalOptions="EndAndExpand" VerticalOptions="Start" IsVisible="{Binding LocalizedReadoutDescription,
       Converter={StaticResource nullToBoolConverter}}" FontSize="Micro" LineBreakMode="NoWrap"/>
 </StackLayout>

我觉得,即使它返回 true,但它使用前面的行值。但只有这部分不更新。标签名称,值已更新,但只有某些项目的可见性未更新..

我的错误在哪里?

更新:

我为要控制其可见性的标签的属性更改创建了一个事件。我可以看到,IsVisible 始终为真,但在 GUI 上,只有一个项目是可见的.. 但是当我滚动时,有几个是可见的,当我滚动更多时,所有项目都是可见的,因为它必须是

    private void HelpLabel_OnPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName.Equals("IsVisible"))
        { 
           // I check => ((Xamarin.Forms.Label)sender).IsVisible 
           //always true
       }
    }
4

1 回答 1

0

我发现了问题。它与缓存或通知 UI 元素无关。不知何故,这是关于项目的高度。我给了一个 height 和 heightrequest 值,然后它总是有效..奇怪..

于 2019-10-25T07:14:47.093 回答