.net – 在WPF中,如何从包含ListBox的DataTemplate内部数据绑定
发布时间:2020-12-13 23:13:48 所属栏目:Windows 来源:网络整理
导读:我有一个 WPF窗口,其视图模型设置为其DataContext,并且具有一个带有DataTemplate的ListBox,其ItemsSource绑定到视图模型,如下例所示: 查看型号: using System.Collections.Generic;namespace Example{ class Member { public string Name { get; set; } pu
我有一个
WPF窗口,其视图模型设置为其DataContext,并且具有一个带有DataTemplate的ListBox,其ItemsSource绑定到视图模型,如下例所示:
查看型号: using System.Collections.Generic; namespace Example { class Member { public string Name { get; set; } public int Age { get; set; } } class Team { private List<Member> members = new List<Member>(); public string TeamName { get; set; } public List<Member> Members { get { return members; } } } } MainWindow.xaml: <Window x:Class="Example.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:l="clr-namespace:Example" Title="Example" Height="300" Width="300" Name="Main"> <Window.DataContext> <l:Team TeamName="The best team"> <l:Team.Members> <l:Member Name="John Doe" Age="23"/> <l:Member Name="Jane Smith" Age="20"/> <l:Member Name="Max Steel" Age="24"/> </l:Team.Members> </l:Team> </Window.DataContext> <ListBox ItemsSource="{Binding Path=Members}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Path=TeamName}" Margin="4"/> <TextBlock Text="{Binding Path=Name}" Margin="4"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Window> 当然,TeamBox的TeamName属性不会显示在ListBox项中,因为LisBox的每个项都是List.ItemTemplate的DataContext,它会覆盖Window的DataContext. 问题是:如何从ListBox的DataTemplate中数据绑定到视图模型(Window.DataContext)的TeamName属性?
我将l:Team声明提取到Window.Resources部分,并从DataContext和DataTemplate中引用它:
<Window x:Class="Example.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:l="clr-namespace:Example" Title="Example" Height="300" Width="300" Name="Main"> <Window.Resources> <l:Team x:Key="data" TeamName="The best team"> <l:Team.Members> <l:Member Name="John Doe" Age="23"/> <l:Member Name="Jane Smith" Age="20"/> <l:Member Name="Max Steel" Age="24"/> </l:Team.Members> </l:Team> <Window.Resources> <Window.DataContext> <StaticResource ResourceKey="data"/> </Window.DataContext> <ListBox ItemsSource="{Binding Path=Members}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Source={StaticResource data},Path=TeamName}" Margin="4"/> <TextBlock Text="{Binding Path=Name}" Margin="4"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Window> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 如何确保在使用WiX显示UI后运行FindRelatedProdu
- windows-server-2008-r2 – 在Windows 2008 R2 S
- window.onbeforeunload的等价于AngularJS中的路由
- windows-server-2012 – 通过远程桌面缓慢登录到
- Windows Phone 7手动启动 – WP7手动启动
- 监控 – 如何监控Windows 2008服务器上的磁盘IO负
- windows-7 – 何时/如何将应用程序添加到Windows
- windows-server-2012-r2 – 如何查看Windows服务
- crystal-reports – 如何从CAB文件创建MSI?
- MCSA / Windows Server 2016 用MAP工具进行IT资产
热点阅读