IsVisible Binding在Xamarin.Forms中不起作用

时间:2019-10-24 13:28:29

标签: xaml xamarin.forms data-binding visibility radlistview

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

我已经设置了断点并记录了日志,看来返回值是true,但仍然没有显示该元素。当我滚动列表视图时,它们是可见的,但有时仍然不可见。.有几项,有时其中某些是可见的,有时却不可见..它是可更改的.. 这是我的转换器

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始终为true,但是在GUI上只有一个项目可见。.但是,当我滚动时,可以看到多个项目,而当我滚动得更多时,则所有项目都是必须可见的

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

1 个答案:

答案 0 :(得分:0)

我发现了问题。它与缓存或通知UI元素无关。不知何故是关于物品的高度。我给了height和heightrequest值,然后它总是可以工作..很奇怪..