WPF绑定第二个ListBox与第一个ListBox中的选定项目相关
Posted
技术标签:
【中文标题】WPF绑定第二个ListBox与第一个ListBox中的选定项目相关【英文标题】:WPF Binding second ListBox in relation to selected item in first ListBox 【发布时间】:2021-09-21 15:50:53 【问题描述】:我是 WPF 和 MVVM 的新手……我创建了一个 WorkstationItem 类
public class WorkstationItem
public WorkstationItem()
public string Name get; set;
public string OS get; set;
public List<UpdateItem> Updates get; set;
UpdateItem 是另一个类:
public class UpdateItem
public UpdateItem()
public string Title get; set;
public string KB get; set;
我创建了一些虚拟数据:
private List<WorkstationItem> workstations = new List<WorkstationItem>();
workstations.Add(new WorkstationItem
Name = "PC01",
OS = "Windows Server 2019",
Updates = new List<UpdateItem>
new UpdateItem Title = "Test", KB = "KB123123" ,
new UpdateItem Title = "Test2", KB = "KB123123"
);
workstations.Add(new WorkstationItem
Name = "PC02",
OS = "Windows Server 2016",
Updates = new List<UpdateItem>
new UpdateItem Title = "Test5", KB = "KB123123" ,
new UpdateItem Title = "Test3", KB = "KB123123"
);
现在我在列表框中显示工作站:
<ListBox x:Name="lbPCs" ItemsSource="Binding WorkstationItemList">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Text="Binding Name" FontSize="12" FontWeight="Bold" />
<TextBlock Text="Binding OS" FontSize="9" />
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
视图模型:
public ObservableCollection<WorkstationItem> WorkstationItemList get; set;
WorkstationManager workstationmanager = WorkstationManager.GetInstance();
WorkstationItemList = new ObservableCollection<WorkstationItem>();
foreach (var k in workstationmanager.GetUpdatelist())
WorkstationItemList.Add(k);
这工作正常...但是我如何在另一个列表中显示与所选工作站相关的List<UpdateItem> Updates
?
所以我在 list1 中选择了一个工作站,并希望在 list2 中显示相关更新?
提前致谢!
【问题讨论】:
【参考方案1】:基本上添加另一个 ListBox 或 ItemsControl 引用现有 ListBox 的 SelectedItem 并绑定到 SelectedItem 的Updates
集合;大致类似(未经测试):
<ListBox ItemsSource="Binding ElementName=lbPCs, Path=SelectedItem.Updates">
<ListBox .ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<!-- TODO improve alignment+layout -->
<TextBlock Text="Binding KB" />
<TextBlock Text="Binding Title" />
</StackPanel>
</DataTemplate>
<ListBox .ItemTemplate>
</ListBox>
如果您想对所选项目执行更复杂的操作但要显示其Updates
,则将 lbPC 的 SelectedItem 绑定到某个新的 ViewModel 属性并将新的 ListBox 的 itemsource 绑定到该属性可能更合适VM 属性的更新集合。
【讨论】:
以上是关于WPF绑定第二个ListBox与第一个ListBox中的选定项目相关的主要内容,如果未能解决你的问题,请参考以下文章