2015-10-18 214 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