2015-02-23 56 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对象。

相关问题