我使用内置ListView
使用GridView
,如下所示使用WPF,现在如何在Check Box Click上获取所选行。请帮我。
<ListView Name="lvWTMProductSelectionSku" Style="{StaticResource ListViewStyle}" >
<ListView.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Visibility" Value="Visible" />
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Width="Auto" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<CheckBox Visibility="Visible" IsChecked="{Binding IsSkuChecked}" Checked="CheckBox_Checked" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
答案 0 :(得分:0)
首先定义一个包含所有内容的ObservableCollection
ListViewItems
,为什么ObservableCollection
?因为那种类型
集合实现允许的ICollectionChanged
接口
您可以跟踪集合中的任何更改并更新UI
因此,您的codebehind / ViewModel需要实现INotifyPropertyChanged
接口
然后定义一个SelectedItem
属性并将其绑定到ListViewSelectedItem
,该属性将包含当前属性
列表中的所选项目
最后在checked
处理程序中使用SelectedItem
道具来做你想做的任何事情。
和代码隐藏:
public partial class MainWindow : Window,INotifyPropertyChanged
{
private ObservableCollection<Item> _ditemSource ;
public ObservableCollection<Item> DitemSource
{
get
{
return _ditemSource;
}
set
{
if (_ditemSource == value)
{
return;
}
_ditemSource = value;
OnPropertyChanged();
}
}
private Item _itemSelected ;
public Item ItemSelected
{
get
{
return _itemSelected;
}
set
{
if (_itemSelected == value)
{
return;
}
_itemSelected = value;
OnPropertyChanged();
}
}
public MainWindow()
{
InitializeComponent();
DitemSource = new ObservableCollection<Item>()
{
new Item()
{
Name = "name1 ",
IsSkuChecked = false
},
new Item()
{
Name = "name2 ",
IsSkuChecked = true
}
};
ItemSelected = DitemSource.First();
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
MessageBox.Show(ItemSelected.Name);
}
}
public class Item
{
public String Name { get; set; }
public bool IsSkuChecked { get; set; }
}
这是一种方法,你当然可以通过在ListViewItem
事件处理程序中获取发件人的父*(CheckBox
)来直接获取checked
,但这不是一种优雅的方式。