我有一个典型的标签,我想通过是否为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
}
}
答案 0 :(得分:0)
我发现了问题。它与缓存或通知UI元素无关。不知何故是关于物品的高度。我给了height和heightrequest值,然后它总是可以工作..很奇怪..