xaml - UWP ListView DataTemplate 绑定到项目而不是属性
问题描述
如何将数据模板中的项目绑定到项目本身,而不是该项目的属性?
我有一个将项目作为模型的用户控件。鉴于这些模型:
public class Car
{
public string Name { get; set; }
public Color color { get; set; }
public string Model { get; set; }
}
public MyUserControl : UserControl
{
public Car Model { get; set; }
}
public MyPage : Page
{
public ObservableCollection<Car> CareList { get; set; }
}
我想在 XAML 中做这样的事情:
<ListView ItemsSource="{x:Bind CarList}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="models:Car">
<StackPanel>
<!-- Binding to properties of Car is simple... -->
<TextBlock Text="{x:Bind Name}">
<!-- But what if I want to bind to the car itself ??? -->
<userControls:MyUserControl Model="{x:Bind Car}">
</userControls:MyUserControl>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
解决方案
@user2819245 的评论是正确的,如果您不指定Path
绑定的,那么DataContext
将直接绑定对象。
在 UWP 中,如果您的列表源可以在运行时更改或延迟加载,那么您可能还需要指定
Mode=OneWay
,这是由于{x:Bind}
默认为OneTime绑定模式。此示例包括如何
Mode
在两个用例中设置属性
<ListView ItemsSource="{x:Bind CarList, Mode=OneWay}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="models:Car">
<StackPanel>
<!-- Binding to properties of Car is simple... -->
<TextBlock Text="{x:Bind Name, Mode=OneWay}">
<!-- Binding to the car itself (as the DataContext of this template) -->
<userControls:MyUserControl Model="{x:Bind Mode=OneWay}">
</userControls:MyUserControl>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
推荐阅读
- javascript - 我的 console.log() 在我的 chrome 控制台中显示了两次
- java - 有没有办法在创建 Swing GUI 窗口时设置 JLabel 文本?
- javascript - 如何使用 Javascript 将数据导出到 CSV?
- java - 如何启用资源文件以获取环境变量,如 application.properties 在 Spring Boot 中所做的
- java - 在servlet中上传文件的问题
- java - java.lang.SecurityException:权限策略文件未由预期的签名者签名
- jquery-ui - Basecamp3 Jquery ui datepicker未打开
- c++ - c ++从每个单词之间使用':'读取文件
- c# - 具有不同参数的 GroupBy
- salt-stack - 将目录传递到statle.sls