gpt4 book ai didi

xaml - ListView SelectedItem 与 Xamarin 表单和 ReactiveUI 问题绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 19:15:45 32 4
gpt4 key购买 nike

我有一个显示名称的基本项目列表。我需要在单击列表项之一后导航到新屏幕。 super 简单,对吧?我不知道哪里出了问题。

列表正在正确显示其项目。选择一个项目后, ListView 会突出显示相应的项目,但不会发生其他任何情况。我没有收到任何错误。就好像 View 和 View 模型没有正确连接,或者 View 模型中的订阅没有正确设置。我对 ReactiveUI 很陌生。

下面是我的代码的虚拟示例。

ItemListViewModel.cs

public IReactiveDerivedList<ItemTileViewModel> ItemTiles { get; protected set; }
public ItemTileViewModel SelectedItemTile { get; set; }

private void Initialize(){
ItemTiles = LoadedItems.CreateDerivedCollection(item => new ItemTileViewModel(item));
this.WhenAnyValue(x => x.SelectedItemTile)
.Where(tile => tile != null)
.Select(tile => tile.Model)
.Subscribe(item =>
{
HostScreen.Router.Navigate.ExecuteAsync(new ItemViewModel(item));
SelectedItemTile = null;
});

// We load the items
}

我不确定使用派生列表是否合适。我希望我没有提供足够的背景信息来提供反馈。

ItemListView.xaml.cs - 构造函数

this.OneWayBind(ViewModel, vm => vm.ItemTiles, v => v.ItemTiles.ItemsSource);
this.Bind(ViewModel, vm => vm.SelectedItemTile, v => v.ItemTiles.SelectedItem);

ItemListView.xaml

<ListView x:Name="ItemTiles">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<views:ItemTileView ViewModel="{Binding}" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

最佳答案

除非您简化了示例代码,否则问题应该存在:

public ItemTileViewModel SelectedItemTile { 获取;放; }

这是一个常规属性,在修改时永远不会生成任何事件(例如,在选择时由 View 绑定(bind)设置)。

您应该像任何 RxUI 属性一样编写它:

string selectedItemTitle;
public string SelectedItemTile {
get { return selectedItemTitle; }
set { this.RaiseAndSetIfChanged(ref selectedItemTitle, value); }
}

Reference

关于xaml - ListView SelectedItem 与 Xamarin 表单和 ReactiveUI 问题绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31977859/

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