2015-02-23 76 views
0

我無法從列表視圖的子項列表框中獲取selecteditem。我試過的所有東西都會返回在父級列表視圖中設置的GpoObject,但不會從列表框中選擇所選的OuLink。如何獲取ListView中的SelectedItem和ListBox?

這是我爲ListBox的DataTemplate:

 <DataTemplate x:Key="OuTemplate"> 
      <Label Content="{Binding Path=Path}"/> 
     </DataTemplate> 

這是我與它的列表框列表視圖:

<ListView x:Name="OutListView" 
       BorderBrush="#FFA0A0A0" 
       BorderThickness="1"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Group Policy Objects" 
           Width="Auto"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Grid.Column="0" 
             Text="{Binding Path=Name}" 
             Width="Auto"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header="Organizational Units"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <ListBox Grid.Column="1" 
            ItemsSource="{Binding Path=OUs}" 
            ItemTemplate="{DynamicResource OuTemplate}" 
            Width="Auto" Height="Auto" 
            BorderThickness="0"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 

對象綁定:

public class GpoObject 
{ 
    public string Name {get; set;} 
    public string Id { get; set; } 
    public List<OuLink> OUs { get; set; } 


} 

public class OuLink 
{ 
    public string Path { get; set; } 
} 
+0

有人問類似的問題看看這裏http://stackoverflow.com/questions/28683297/how-to-access-properties-of-objects-supplied-to-event-handler-can-view-when-de/28683448#28683448,如果這沒有幫助請做一個谷歌搜索有噸工作示例在這裏'stackoverflow' – MethodMan 2015-02-23 21:46:41

+0

你究竟在哪裏獲得選定的項目?取決於這個需求的*位置*可能會導致適當的答案。 – OmegaMan 2015-02-23 21:48:03

+0

@OmegaMan我的計劃是允許用戶雙擊子列表框中的項目,並返回路徑。這是否回答你的問題? – 2015-02-24 12:59:53

回答

1

以下是訪問Path關閉列表框選擇的項目有兩種方式。我已經命名了列表框,以便在Xaml中更輕鬆。以顯示所選的信息,我徑處理將其在現在的文本框駐留在列表框上方(參見圖):

<GridViewColumn.CellTemplate> 
    <DataTemplate> 
     <StackPanel> 
      <TextBlock x:Name="tbSelected" 
         Text="{Binding ElementName=PathBox, Path=SelectedItem.Path}" /> 
      <ListBox x:Name="PathBox" 
         SelectionChanged="PathBox_OnSelectionChanged" 
         ItemsSource="{Binding Path=OUs}" 
         ItemTemplate="{DynamicResource OuTemplate}"/> 
     </StackPanel> 
    </DataTemplate> 
</GridViewColumn.CellTemplate> 

然後,當選擇更改我向用戶呈現與所選擇的路徑的消息框上:

private void PathBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var lbi = sender as ListBox; 
    if (lbi != null) 
     if (lbi.SelectedItem != null) 
     { 
      var link = lbi.SelectedItem as OuLink; 

      if (link != null) 
       MessageBox.Show(link.Path); 

     } 
} 

這裏是一個選擇和其傳播到文本框和信息框: enter image description here


我建議內OnSelectionChanged而不是您將該選擇放入ViewModel的INotifyPropertyChanged字符串屬性中的消息框,並將其傳播到該程序中的其他項目。

+0

非常感謝!這一直讓我瘋狂。 – 2015-02-25 14:55:27

0

添加SelectedItem="{Binding SelectedOuLink}"到您的xaml中的ListBox。

然後在您的GpoObject類添加:

public OuLink SelectedOuLink { get; set; } 

您現在可以通過SelectedOuLink檢索選定OuLink對象。

相關問題