我有一个用户列表框,我想从中获取所选项目。我使用了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;
}
}
答案 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。
我发布了一些与此类似的代码,演示了如何通过绑定来挂接视图和视图模型: