我正在尝试使用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();
}
答案 0 :(得分:0)
尝试解决方案的下一个解决方案:
我可以理解你的问题是,事件参数的添加项目不包含当前所选项目。但是你的代码没有任何问题。当我使用它时,它返回实际模型(技能)。但是如果你对它应用ToString()方法,你就不会得到真正的模型,结果将只是一个类的全名(<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);
问候