我想在对象列表中显示属性,但如果属性没有任何值,我想将其留空。
这就是我的意思:假设我有一个具有四个字符串值的对象:
object person:
string firstname
string lastname
string favoriteMovie
string favoriteBook
实际上,我有一个列表:
ObservableList<Person>
。我想使用 Person
显示 CollectionView
以及每个 Person中的属性,仅当该属性没有值时我想跳过它。
XAML 代码看起来像这样:
<CollectionView ItemsSource={Binding People}>
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="model:Person">
<Frame>
<Grid>
<Label Text="{Binding Name}"/>
<Label Text="{Binding FavoriteMovie}"/>
<Label Text="{Binding FavoriteBook}"/>
...
...
...
...
</CollectionView>
我该怎么做?
注意:我正在使用 MVVM 模式,如果可能的话,我希望主要在 XAML 中执行此操作。
您将需要一个转换器,将空或空字符串转换为布尔值,然后您需要将其分配给您的项目的可见性,这样像下面这样的东西就可以工作,
/// <summary>
/// Inherit this for one-way converters to avoid unnecessary extra methods in each converter
/// </summary>
public abstract class BaseOneWayValueConverter : IValueConverter
{
public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException($"{GetType().Name} is a one-way converter");
}
}
public class StringIsNullToBoolConverter : BaseOneWayValueConverter
{
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is not string text || !string.IsNullOrWhiteSpace(text);
}
}
然后在您的标签中使用它,如下所示:
<ContentPage
.
.
.
.
xmlns:converters=*converter-namepsace-here*
>
<ContentPage.Resources>
<StringIsNullToBoolConverter x:Key="StringIsNullToBoolConverter"/>
</ContentPage.Resources>
然后在各自的标签中使用它:
<Label Text="{Binding Name}" IsVisible="{Binding Name,Converter={StaticResource StringIsNullToBoolConverter}}"/>