Search code examples
c#wpflistviewstackpanel

How to get value from Listview with a stackpanel in wpf


I have a listview which is populated using a stackpanel in wpf. I want to get pooja_name of each row when click on star value textblock.

<ListView x:Name="bookedlist" HorizontalAlignment="Left" Height="449" Margin="679,238,0,0" VerticalAlignment="Top" BorderBrush="#00828790" Background="Transparent" Focusable="False">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel x:Name="stackkk" Orientation="Horizontal" >
                    <Border BorderThickness="0.5" BorderBrush="#FFB0AEAE">
                        <TextBlock Text="{Binding Pooja_name}" TextAlignment="Left" Margin="5" Width="250"/>
                    </Border>
                    <Border BorderThickness="0.5" BorderBrush="#FFB0AEAE">
                        <TextBlock Text="{Binding Name}" TextAlignment="Left" Margin="5" Width="250"/>
                    </Border>
                    <Border BorderThickness="0.5" BorderBrush="#FFB0AEAE">
                        <TextBlock Text="{Binding Star}" TextAlignment="Left" MouseLeftButtonDown="Star_function" Margin="5" Width="95"/>
                    </Border>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Listview is populated using a modelclass

public class Booked
    {
        public string Pooja_name { get; set; }
        public string Name { get; set; }
        public string Star { get; set; }
    }

and a jsonarray

JArray bookedpoojalist = JArray.Parse(bookedval);
                List<Booked> booked = JsonConvert.DeserializeObject<List<Booked>>(bookedpoojalist.ToString());
                bookedlist.ItemsSource = booked;

I want to get pooja name when star value text block MouseLeftButtonDown is activated.


Solution

  • Cast the DataContext of the sender argument to a Booked:

    private void Star_function(object sender, MouseButtonEventArgs e)
    {
        TextBlock textBlock = (TextBlock)sender;
        Booked booked = textBlock.DataContext as Booked;
        if (booked != null)
        {
            string s = booked.Pooja_name;
            //...
        }
    }