gpt4 book ai didi

.net - 在 WPF 中,如何从包含的 ListBox 的 DataTemplate 内部将数据绑定(bind)到 Window DataContext?

转载 作者:行者123 更新时间:2023-12-02 03:20:34 25 4
gpt4 key购买 nike

我有一个 WPF 窗口,其中 View 模型设置为其 DataContext,并且有一个带有 DataTemplate 的 ListBox,其 ItemsSource 绑定(bind)到 View 模型,如以下示例所示:

查看模型:

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>

当然,Team 类的 TeamName 属性不会显示在 ListBox 项中,因为 LisBox 的每个项都是 List.ItemTemplate 的 DataContext,并且它会覆盖 Window 的 DataContext。

问题是:如何从 ListBox 的 DataTemplate 中将数据绑定(bind)到 View 模型 (Window.DataContext) 的 TeamName 属性?

最佳答案

你也可以使用RelativeSource绑定(bind),没那么复杂:

<TextBlock Text="{Binding Path=DataContext.TeamName, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" Margin="4"/>

关于.net - 在 WPF 中,如何从包含的 ListBox 的 DataTemplate 内部将数据绑定(bind)到 Window DataContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1959626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com