gpt4 book ai didi

c# - 具有已编译绑定(bind)的 HubSection

转载 作者:太空狗 更新时间:2023-10-30 01:17:22 25 4
gpt4 key购买 nike

我试图掌握新的编译绑定(bind),但一开始我就被这个简单的问题打断了。

我有一个 Hub 控件和一个 HubSection。此部分的内容是一个 ItemsControl,需要绑定(bind)到 View 模型的可观察集合。我无法让此绑定(bind)按预期工作。

<Pivot x:Name="rootPivot" Style="{StaticResource TabsStylePivotStyle}">
<PivotItem>
<Hub>
<HubSection Header="News">
<DataTemplate x:DataType="local:HomePage">
<ItemsControl ItemsSource="{x:Bind ViewModel.NewsItems, Mode=OneWay}" />

ViewModel 属性只是一个属性,在 InitializeComponents() 调用之前实例化。 NewsItems 是在页面加载后填充的 View 模型中的可观察集合 - 异步(网络请求)。

我在这里做错了什么?

编辑:代码隐藏

HomePage.xaml.cs

/// <summary>
/// Home pag view.
/// </summary>
public sealed partial class HomePage : Page
{
/// <summary>
/// Initializes a new instance of the <see cref="HomePage"/> class.
/// </summary>
public HomePage()
{
// Retrieve view model
this.ViewModel = ViewModelResolver.Home;

// Trigger view model loaded on page loaded
this.Loaded += (sender, args) => this.ViewModel.LoadedAsync();

this.InitializeComponent();
}

/// <summary>
/// Gets the view model.
/// </summary>
/// <value>
/// The view model.
/// </value>
public IHomeViewModel ViewModel { get; }
}

HomePageViewModel.cs

/// <summary>
/// Home view model.
/// </summary>
public sealed class HomeViewModel : IHomeViewModel
{
/// <summary>
/// Occurs on page loaded.
/// </summary>
public async Task LoadedAsync()
{
// Retrieve news items
var news = await new NewsService().GetNewsAsync();
foreach (var newsItem in news)
this.NewsItems.Add(newsItem);
}

/// <summary>
/// Gets the news items.
/// </summary>
/// <value>
/// The news items.
/// </value>
public ObservableCollection<IFeedItem> NewsItems { get; } = new ObservableCollection<IFeedItem>();
}

最佳答案

这确实是一个有趣的问题。我想问题在于,与典型的 DataTemplate 不同,如下所示(请参阅其父级 ListView 绑定(bind)到一些已知数据 Model.Items)

<ListView ItemsSource="{x:Bind Model.Items}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="model:Item">
<Grid>
<TextBlock Text="{x:Bind Name}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

然而,您的顶级 DataTemplate 并不知道数据来自何处。

因此解决方法是告诉 HubSection 绑定(bind)正确的数据 - 在本例中为 HomePage.xaml.cs 实例。因此,尝试将其添加到您的 Hub

<Hub DataContext="{x:Bind}">

或者简单地添加

this.InitializeComponent();
this.DataContext = this;

无论哪种方式都可以解决您的问题。

关于c# - 具有已编译绑定(bind)的 HubSection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32001931/

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