如何在其中包含列表框的列表视图中获取 SelectedItem?
How do I get the SelectedItem in a Listview with Listbox in it?
我无法从作为列表视图子项的列表框中获取所选项目。我尝试过的所有内容 returns 在父列表视图中设置的 GpoObject,但不是从列表框中选择的 OuLink。
这是我的列表框数据模板:
<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; }
}
将 SelectedItem="{Binding SelectedOuLink}"
添加到 xaml 中的列表框。
然后在你的 GpoObject
class 添加:
public OuLink SelectedOuLink { get; set; }
您现在可以通过 SelectedOuLink
检索选定的 OuLink
对象。
这里有两种方法可以访问 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>
Then on when the selection changes I present the user with a message box of the selected path:
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
字符串 属性 中,然后将其传播到程序中的其他项目.
我无法从作为列表视图子项的列表框中获取所选项目。我尝试过的所有内容 returns 在父列表视图中设置的 GpoObject,但不是从列表框中选择的 OuLink。
这是我的列表框数据模板:
<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; }
}
将 SelectedItem="{Binding SelectedOuLink}"
添加到 xaml 中的列表框。
然后在你的 GpoObject
class 添加:
public OuLink SelectedOuLink { get; set; }
您现在可以通过 SelectedOuLink
检索选定的 OuLink
对象。
这里有两种方法可以访问 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>
Then on when the selection changes I present the user with a message box of the selected path:
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
字符串 属性 中,然后将其传播到程序中的其他项目.