I have a ListView that utilizes a DataTemplate. Inside the data template I have a few StackLayouts. The ListView ItemsSource is set to a list of "Category"(Category is my class), and the IsVisible property of one of those StackLayouts is bound to Category.IsVisible. ClassId is also bound, so on tap gesture, I figure out which Category item is the item behind the ListView item and set it's IsVisible. That does not work though, and the StackLayout remains visible
<ListView
SeparatorColor="#888888"
SeparatorVisibility="Default"
BackgroundColor="White"
SelectionMode="None"
HasUnevenRows="True"
x:Name="mainListView">
<ListView.Header>
<ContentView
Padding="0,5">
<Label
Margin="0,0,0,15"
FontSize="20"
TextColor="#FF4081"
Text="WINDOW CLEANING"/>
<!--TextColor="#FF4081"-->
</ContentView>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.ContextActions>
<MenuItem
Clicked="OnDelete"
CommandParameter="{Binding .}"
Text="Delete"
IsDestructive="True" />
</ViewCell.ContextActions>
<StackLayout
ClassId="{Binding Id}"
Orientation="Vertical">
<StackLayout.GestureRecognizers>
<TapGestureRecognizer
Tapped="Category_Tapped"
NumberOfTapsRequired="1" />
</StackLayout.GestureRecognizers>
<StackLayout
BackgroundColor="#e0e0e0"
Orientation="Horizontal"
VerticalOptions="FillAndExpand"
Padding="5"
Grid.Column="0">
<Image
Source="{Binding ImageSource}" />
<Label
Margin="10,0,0,0"
VerticalOptions="Center"
HorizontalOptions="StartAndExpand"
TextColor="#FF4081"
FontSize="17"
Text="{Binding Name}" />
<Label
Margin="0,0,10,0"
VerticalOptions="Center"
HorizontalOptions="End"
TextColor="DarkCyan"
Font="Bold, 20"
Text="{Binding ShortedAmount}" />
</StackLayout>
<StackLayout
Orientation="Horizontal"
IsVisible="{Binding IsVisible, Mode=OneWayToSource}">
<Label
HorizontalOptions="StartAndExpand"
Margin="5,10,0,20"
TextColor="DarkCyan"
Font="Bold, 16"
Text="{Binding Text}"/>
<Label
HorizontalTextAlignment="End"
HorizontalOptions="End"
Margin="0,10,10,20"
TextColor="DarkCyan"
Font="Bold, 16"
Text="{Binding Amount}"/>
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Code behind snippets:
mainListView.ItemsSource = CategoryFactory.Categories;
private void Category_Tapped(object sender, EventArgs e)
{
string id = ((StackLayout)sender).ClassId;
id = id.Replace("CAT", "");
int i = Convert.ToInt32(id);
CategoryFactory.Categories[i].IsVisible = !CategoryFactory.Categories[i].IsVisible;
}
I think you get the idea. I want to create an expandable list in runtime
OneWayToSource
? – Jason