从列表框中选择项目XAML
问题描述:
我想使用listbox_SelectionChanged()方法从列表框中选择项目,但它似乎不工作。你能告诉我什么是从列表框中获取选定项目的最佳方法。我试过的代码是波纹管。从列表框中选择项目XAML
你的帮助非常感谢。
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();
}
答
- 首先检查是什么的DataConntext或的ItemsSource你ListBox(它必须是一个ObservableCollection以避免内存泄漏)。
- 检查输出窗口中是否存在绑定错误。
- 检查是否有Correcct属性绑定到。
-
尝试解决方案的下一个解决方案: 正如我所理解的,问题是添加的事件参数项不包含当前选定的项目。但是你的代码没有任何问题。它在我使用它时返回实际模型(技能)。但是如果你对它应用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);
问候
我想你的代码和evend在烧制正常时,项列表被选择,它都在'lbSkills.SelectedItem'和'e.AddedItems [0]' –
lbSkills.SelectedItem正确显示所选项目。尝试删除异步/等待并检查。 – AnjumSKhan
嗨ANjum,我试着去除异步/等待,但仍然是一样的。我只得到路径,但没有选择的项目。只是提到我在Windows 8.1(不是电话)尝试这个。 – BRDroid