[英]Selecting a listview row with a checkbox
我将 api 称为 WPF listView。 我在每一行中添加了一个CheckBox
并尝试在 select 一行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
方法,以及我尝试过的方法以及它产生的 output
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
}
我检查了过去的问题/答案,没有发现任何与我正在尝试做的事情一致的事情。
默认情况下, ListView.ItemTemplate
中的DataTemplate
将绑定到ItemsSource
中的数据项。 如果您想绑定到ListViewItem
本身(其中包含DataTemplate
),您可以使用RelativeSource
:
...
IsChecked="{Binding IsSelected,
RelativeSource={RelativeSource AncestorType=ListViewItem}}"
...
获取当前选定项目的正确属性是SelectedItem
,而SelectedValue
只能与SelectedValuePath
一起使用。
当所选项目更改时执行某些操作的事件是SelectionChanged
。
private void listView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
MyDataObject selectedItem = myListView.SelectedItem;
Selected_label.Text = selectedItem.SomeTextProperty;
}
但是,通常您会绑定到SelectedItem
而不是直接处理SelectionChanged
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.