如何在WPF中使用gridview从列表视图中获取复选框的选中值

时间:2015-03-12 06:46:38

标签: .net wpf

我使用内置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>

1 个答案:

答案 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 ,但这不是一种优雅的方式。