首页 文章

从列表框XAML中选择的项目

提问于
浏览
0

我试图使用listbox_SelectionChanged()方法从ListBox中获取所选项目,但它似乎不起作用 . 你能告诉我什么是从列表框中取出所选项目的最佳方法 . 我试过的代码是吼叫 .

你的帮助非常感谢 .

XAML

<ListBox
            x:Name="lbSkills"
            Grid.Row="1"
            Margin="10,0,10,10" SelectionChanged="LbSkills_SelectionChanged">
                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem">
                        <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
                    </Style>
                </ListBox.ItemContainerStyle>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Border BorderThickness="0,0,0,1" BorderBrush="Beige">
                            <Grid Width="auto" HorizontalAlignment="Stretch">
                                <TextBlock VerticalAlignment="Center" FontSize="26" Grid.Column="0" Foreground="Black" Text="{Binding SkillDescription}"/>
                            </Grid>
                        </Border>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

XAML.cs - 我也尝试过注释代码,但无法获取所选项目

private async void LbSkills_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        //var addedItems = e.AddedItems;
        //string selectedSkillString = "None";
        //if (addedItems.Count > 0)
        //{
        //   var selectedSkill = addedItems[0];
        //    selectedSkillString = selectedSkill.ToString();
        //}

        //lbSkills.SelectedItem.ToString();

        MessageDialog msgBox = new MessageDialog(e.AddedItems.ToString());
        await msgBox.ShowAsync();
    }

1 回答

  • 0
    • 首先检查ListBox的DataConntext或ItemsSource是什么(它必须是一个ObservableCollection以避免内存泄漏) .

    • 检查“输出”窗口中是否存在绑定错误 .

    • 检查是否有要绑定的correcct属性 .

    • 尝试下一个解决方案的解决方案:我可以理解你,问题是事件参数的添加项目没有得到真正的模型,结果将只是类的全名( <Full.Assembly.Path>.<Class_Name> ) . 如果要获取模型实例,则必须强制转换或安全地转换e.AddedItems内容,或者必须覆盖模型类中的ToString()方法 . 另一方面,如果您想出于某种原因想要获取ListBoxItem本身,请尝试使用下一个代码:

    var listBox = sender as ListBox;
        var selected = e.AddedItems.Cast<object>().FirstOrDefault();
        var container = listBox.ItemContainerGenerator.ContainerFromItem(selected);
    

    问候

相关问题