从绑定列表框中获取所选项目

时间:2014-03-24 09:59:56

标签: c# wpf listbox

我有一个用户列表框,我想从中获取所选项目。我使用了selectitem,但它总是返回零。 这是我的列表框xaml代码:

 <ListBox  Name="_imageList" Margin="10,10,10,0"  IsSynchronizedWithCurrentItem="True" ScrollViewer.HorizontalScrollBarVisibility="Visible"  VerticalAlignment="Top" Height="250" BorderThickness="0" SelectionChanged="List_clicked">
        <!--<ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                <EventSetter Event="MouseLeftButtonDown"  Handler="ListBoxItem_MouseLeftButtonDown"/>
            </Style>
        </ListBox.ItemContainerStyle>-->
        <ListBox.ItemTemplate>
            <DataTemplate DataType="Enfant">
                <Border CornerRadius="30">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                        <Button Grid.Row="0" Width="50" Height="80" Click="btn_click">
                            <Button.Template>
                                <ControlTemplate>
                                    <Image x:Name="image" Source="{Binding avatar}"/>
                                </ControlTemplate>
                            </Button.Template>
                        </Button>
                        <TextBlock Grid.Row="1" x:Name="nom" Text="{Binding prenom}" VerticalAlignment="Center"/>
                </Grid>
                </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

这就是背后的代码:

 private void btn_click(object sender, RoutedEventArgs e)
    {
        if (OnKidClick != null)
        {
            kid = new Enfant();
            OnKidClick(this, new RoutedEventArgs());
            var item = _imageList.SelectedItem;
        }
    }

3 个答案:

答案 0 :(得分:0)

您已经在SelectionChanged="List_clicked"方法中处理了所选项目,并按照该方法执行操作。

答案 1 :(得分:0)

您可以使用ICollectionView for ListBox源,您可以使用CurrentItem属性轻松选择项目。

 public class UserInfoViewModel 
  {
    private ICollectionView _employeeCollectionView;
    public ICollectionView EmployeeCollectionView
    {
        get
        {
            return _employeeCollectionView;
        }
        private set { _employeeCollectionView = value; }
    }
  private void GetEmployee()
    {
     EmployeeCollectionView = CollectionViewSource.GetDefaultView(HERE-IS-YOUR-COLLECTION);

     EmployeeCollectionView.CurrentChanged += new EventHandler(_customerView_CurrentChanged);
   }

 void _customerView_CurrentChanged(object sender, EventArgs e)
    {
      var selectedEmployee= EmployeeCollectionView.CurrentItem as Employee;
    }
}

将ListBox绑定到您的集合。

<ListBox ItemsSource="{Binding EmployeeCollectionView, UpdateSourceTrigger=PropertyChanged,     NotifyOnSourceUpdated=True}"   IsSynchronizedWithCurrentItem="True">


</ListBox >
希望这有帮助。

答案 2 :(得分:0)

我会做MVVM风格。然后在ListBox中设置属性

SelectedItem = "{Binding SelectedEmployee}"

然后在ViewModel为ListBox提供数据(此View的DataContext)中创建SelectedEmployee属性。当所选项目发生变化时,将始终调用属性的setter。

我发布了一些与此类似的代码,演示了如何通过绑定来挂接视图和视图模型:

Hiding A Listbox Item in WPF