Gostaria de exibir as propriedades em uma lista de objetos, mas se as propriedades não tiverem nenhum valor, gostaria não apenas de deixá-las em branco, mas também de fazer com que a linha inteira não exista (isso é fundamental).
Aqui está o que quero dizer: digamos que eu tenha um objeto com quatro valores de string:
object person:
string firstname
string lastname
string favoriteMovie
string favoriteBook
Na verdade, tenho uma lista deles: ObservableList<Person>
. Quero exibir Person
as propriedades de cada Pessoa usando CollectionView
, somente se a propriedade não tiver um valor, quero ignorá-la.
O código XAML seria mais ou menos assim:
<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>
Como faço isso?
NOTA: estou usando o padrão MVVM e gostaria de fazer isso principalmente em XAML, se possível.
Você precisará de um conversor que converta strings vazias ou nulas em booleanos e, em seguida, precisará atribuí-lo à visibilidade do seu item para que algo como o abaixo funcione,
E então use-o em seu Label conforme mostrado abaixo:
Em seguida, use-o em seus respectivos rótulos:
Aqui está uma maneira de fazer isso. Primeiro fazemos o Model que é responsivo usando o
INotifyPropertyChanged
e aPropertyChangedEventHandler
, aqui também colocamos o booleano para usar se vamos apresentar a linha ou não.O código xaml para imitar o layout da sua imagem. No rótulo/grade vinculamos
IsVisible
ao valor booleano do modelo.E finalmente no seu ViewModel você tem
Isto é o que parece. Espero que seja isso que você deseja.