[英]Get row of a checkbox inside a listview wpf
我在这件事上是新手,但有一个问题,经过一些研究,我找不到任何有效的答案...我有这个XAML代码:
<ListView Margin="0,0,0,0" Name="EpisodesList">
<ListView.View>
<GridView>
<GridViewColumn Header="Season" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Season}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Episode" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Episode}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Assitido" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<CheckBox IsChecked="{Binding Watched}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Baixar" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<CheckBox IsChecked="{Binding Download}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
XAML背后的原因是:
public SerieInfo()
{
InitializeComponent();
List<Episodes> episodes = new List<Episodes>();
for (int i = 0; i < 10; i++)
{
episodes.Add(new Episodes()
{
Season = i.ToString(),
Episode = (i + 2).ToString(),
Download = true,
Watched = true,
});
}
EpisodesList.ItemsSource = episodes;
}
public class Episodes
{
public string Season { get; set; }
public string Episode { get; set; }
public bool Download { get; set; }
public bool Watched { get; set; }
}
当未选中或选中任何复选框时,例如,我需要获取该行的季节值...
+--------+---------+---------+----------+
| Season | Episode | Watched | Download |
+--------+---------+---------+----------+
| 1 | 3 | Checked |Unchecked | <-- Get the "1" value when any checkbox change
+--------+---------+---------+----------+
您可以使用复选框的选中和未选中事件来获取季节。 请参考下面的代码。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<Episodes> episodes = new List<Episodes>();
for (int i = 0; i < 10; i++)
{
episodes.Add(new Episodes()
{
Season = i.ToString(),
Episode = (i + 2).ToString(),
Download = true,
Watched = true,
});
}
EpisodesList.ItemsSource = episodes;
}
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
CheckBox chk = sender as CheckBox;
Episodes epi = chk.DataContext as Episodes;
var season = epi.Season;
}
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
CheckBox chk = sender as CheckBox;
Episodes epi = chk.DataContext as Episodes;
var season = epi.Season;
}
}
和XAML
<ListView Margin="0,0,0,0" Name="EpisodesList">
<ListView.View>
<GridView>
<GridViewColumn Header="Season" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Season}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Episode" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Episode}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Assitido" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<CheckBox IsChecked="{Binding Watched}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Baixar" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<CheckBox IsChecked="{Binding Download}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.