我正在将一个api调用到WPF listView中。我向每一行添加了一个CheckBox
,并尝试选择CheckBox
的一行,然后显示该值。
我的xaml文件:
<ListView x:Name="myListView"
SelectedValue="{Binding title}"
Height="550" Margin="35,149,-202.2,0"
VerticalAlignment="Top"
Background="AntiqueWhite" Grid.ColumnSpan="2"
SelectionChanged="MyListView_SelectionChanged">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<CheckBox
Name="myCheckBox"
Click="listView_Click"
IsChecked="{Binding IsChecked}"
Margin="5, 0"/>
<TextBlock Text=" " />
<TextBlock Text="{Binding title}" />
<TextBlock Text=", " />
<TextBlock Text="{Binding publisher}" />
<TextBlock Text=", " />
<TextBlock Text="{Binding price}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
以及我的listView_Click
方法,以及我尝试过的方法和所产生的输出
private void listView_Click(object sender, RoutedEventArgs e)
{
//Selected_label.Text = myListView.ItemsSource.ToString();
//Output = System.Collections.Generic.List`1[ShortBoxedUI.ShortBoxed+Comics]
//Selected_label.Text = myListView.Items.ToString();
//Output = System.Windows.Controls.ItemCollection
//Selected_label.Text = myListView.ToString();
//Output = System.Windows.Controls.ListView Items.Count:352
}
我检查了过去的问题/答案,但没有发现与我想做的事情相符的事情。
默认情况下,DataTemplate
中的ListView.ItemTemplate
将绑定到ItemsSource
中的数据项。如果要绑定到ListViewItem
本身(包含DataTemplate
),可以使用RelativeSource
:
RelativeSource
获得当前选定项目的正确属性是...
IsChecked="{Binding IsChecked, RelativeSource={RelativeSource AncestorType=ListViewItem}}"
...
,并且当选定项目发生更改时执行操作的正确事件是SelectedItem
。
SelectedItem
不过,很常见,您将绑定到SelectionChanged
而不是直接处理SelectionChanged
。