如何将我的 ListView 绑定转换为 x:Bind?

How to convert my ListView binding to x:Bind?

假设我在我的应用程序中指定了以下示例数据源:

App.xaml:

<sampleData:SampleUsers x:Key="SampleUsers"
        d:IsDataSource="True" />

如何将以下两个绑定转换为它们的 x:Bind 变体???

UsersPage.xaml.

xmlns:sampleData="using:MyApp.SampleData.SampleUsers"
.
.
.
<ListView DataContext="{Binding Source={StaticResource SampleUsers}}"
        ItemsSource="{Binding Users, Mode=OneWay}" />

如果您想使用 x:bind,您可以绑定 ItemsSource 然后为 DataTemplate 声明 x x:DataType,如下所示。

<ListView  ItemsSource="{x:Bind SampleUsers.Users, Mode=OneWay}" >
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="local:User">
            <TextBlock Text="{x:Bind Name}"
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

更新

您可以在 xaml 页面资源或隐藏代码中定义 SampleUsers

<Page.Resources>
    <sampleData:SampleUsers x:Key="SampleUsers"/>
</Page.Resources>

更多详情请参阅此document

  1. UsersPage.xaml:

    的代码隐藏中公开 SampleUsers
    public SampleUsers SampleUsers => new SampleUsers();
    
  2. 使用 XAML 中的 {x:Bind} 绑定到它:

    <ListView ItemsSource="{x:Bind SampleUsers}" />
    

{x:Bind} 不使用 DataContext 作为默认源 — 相反,它使用 official docs 中所述的页面或用户控件本身。另请注意,默认模式是 OneTime,假设您在运行时不重置源 属性,在这种情况下完全没问题。