我有 MyPage.xaml 和 MyPage.xaml.cs 文件。 在 .xaml 文件中,我编写了如下数据模板:
<DataTemplate x:Key="MyDataTemplate" x:DataType="local:MyClass">
...
<TextBlock Text="{x:Bind name}" HorizontalAlignment="Left" TextWrapping="Wrap"/>
...
</DataTemplate>
我可以正确绑定MyClass的name属性。 现在我需要绑定 .xaml.cs 文件的属性,但 DataTemplate 仅显示 MyClass 数据。如何绑定 .xaml.cs 页面中的数据?在 DataTemplate 之外(但在同一个 xaml 文件中),我可以看到 .xaml.cs 文件的任何属性。 我需要将对象列表绑定到组合框,如下所示:
<ComboBox ItemsSource="{x:Bind myList}" HorizontalAlignment="Left"></ComboBox>
但 myList 是一个 .xaml.cs 属性。 我想查看列表中对象的字符串名称属性。
谢谢您的帮助
uwp:如何在 x:DataType 之外的 DataTemplate 内绑定数据?
为了方便您的使用,我们建议您使用
Binding
来代替 x:Bind
,您可以使用 Binding
与 ElementName
来访问当前根 DataContext。
例如
<Grid x:Name="GridRoot">
<ListView ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<ComboBox ItemsSource="{Binding ElementName=GridRoot, Path=DataContext.Options}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
代码背后
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.DataContext = this;
}
public List<string> Options { get; set; } = new List<string>() {"One","Two","Three" };
public List<Item> Items { get; set; } = new List<Item>()
{
new Item { Name = "HH" },
new Item { Name = "ZZ" },
new Item { Name = "MM" }
};
}
public class Item
{
public string Name { get; set; }
}
如果您有多个嵌套控件(例如,多个嵌套网格),则应该测试“RootGrid”的多个级别。其中之一可以工作。 这是 UWP - 有时无法猜测所描述的正在工作。