我无法从列表框中获取选定项目,列表框是列表视图的子项。我尝试过的所有内容都会返回在父列表视图中设置的GpoObject,但不会返回列表框中选定的OuLink。
这是ListBox的DataTemplate:
<DataTemplate x:Key="OuTemplate">
<Label Content="{Binding Path=Path}"/>
</DataTemplate>
这是我的Listview,里面有ListBox:
<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 :(得分:1)
以下两种方法可以访问ListBox所选项目的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);
}
}
以下是选择及其在文本框和消息框中的传播:
我建议您在OnSelectionChanged
而不是消息框中将该选择放入ViewModel上的INotifyPropertyChanged
字符串属性,并将其传播到程序中的其他项目。
答案 1 :(得分:0)
将SelectedItem="{Binding SelectedOuLink}"
添加到xaml中的ListBox。
然后在你的GpoObject
课程中添加:
public OuLink SelectedOuLink { get; set; }
您现在可以通过OuLink
检索选定的SelectedOuLink
对象。