2015-10-18 146 views
0

我想使用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(); 
    } 
+0

我想你的代码和evend在烧制正常时,项列表被选择,它都在'lbSkills.SelectedItem'和'e.AddedItems [0]' –

+0

lbSkills.SelectedItem正确显示所选项目。尝试删除异步/等待并检查。 – AnjumSKhan

+0

嗨ANjum,我试着去除异步/等待,但仍然是一样的。我只得到路径,但没有选择的项目。只是提到我在Windows 8.1(不是电话)尝试这个。 – BRDroid

回答

0
  1. 首先检查是什么的DataConntext或的ItemsSource你ListBox(它必须是一个ObservableCollection以避免内存泄漏)。
  2. 检查输出窗口中是否存在绑定错误。
  3. 检查是否有Correcct属性绑定到。
  4. 尝试解决方案的下一个解决方案: 正如我所理解的,问题是添加的事件参数项不包含当前选定的项目。但是你的代码没有任何问题。它在我使用它时返回实际模型(技能)。但是如果你对它应用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); 
    

问候

+0

HI I.A Golik我尝试过用户,但结果相同。我想这是Windows 8.1(不是WindowsPhone)。你认为这就是为什么我没有得到正确的结果 – BRDroid

+0

@Rao不这么认为。我已经在W8.1中尝试过,并且工作。你能对你更具体吗?你到达那里? addedItems [0]的结果是否为空? selectedSkill.ToString()的结果是空的吗? – Ilan

+0

@Rao我添加了一个小的修正... – Ilan