【发布时间】:2018-12-20 02:40:51
【问题描述】:
我觉得我错过了一些明显的东西,因为这太简单了。在此先感谢您的帮助。我正在努力在 Xamarin 应用程序中绑定简单 ListView 的 SelectedItem。我正在 UWP 上进行测试,并且正在使用 Prism 的 MVVM BindableBase 基类。这是我正在经历的:
- 页面加载,列表中没有任何内容被选中。
- 我在列表中选择了一个项目。
-
SelectedGrade的 setter 使用value的null调用。 - 之后,选择项目不会导致调用
SelectedGrade设置器。
这里是相关的 XAML:
<ListView BackgroundColor="#7F7F7F"
CachingStrategy="RecycleElement"
IsPullToRefreshEnabled="True"
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
ItemsSource="{Binding Grades, Mode=OneWay}"
SelectedItem="{Binding SelectedGrade, Mode=TwoWay}"
RefreshCommand="{Binding RefreshCommand}"
RowHeight="50">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout HorizontalOptions="FillAndExpand"
VerticalOptions="CenterAndExpand"
Orientation="Horizontal"
Padding="10">
<Label HorizontalOptions="FillAndExpand"
Text="{Binding Title}"
TextColor="#272832"/>
<Label HorizontalOptions="FillAndExpand"
Text="{Binding Score}"
TextColor="Aquamarine" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这是视图模型:
Grade _selectedGrade;
public Grade SelectedGrade
{
get { return _selectedGrade; }
set { SetProperty(ref _selectedGrade, value); } // this gets set to NULL the first time i select an item then never gets set again
}
编辑:我还在代码隐藏中添加了一个ItemSelected 事件侦听器,并且在选择初始项目后它不会被触发。当它被触发时,SelectedItemChangedEventArgs 显示 ListView 的 SelectedItem 为空。我此时还可以看到 ListView 的 ItemsSource 中包含三个项目的集合,正如我所期望的那样。我很困惑为什么 ListView 认为 SelectedItem 为 null 以及为什么当所选项目更改时它没有广播。
【问题讨论】:
-
你调试过在 SelectedGrade
get中设置断点吗?您应该注意视图是否“请求”它 -
@JuanCarlosRodriguez,只有在页面加载且 SelectedGrade 为 null 时才会调用 getter。然后在第一次选择项目时调用 setter(由于某种原因使用 null 值)。然后不会再次调用 getter 或 setter,尽管 ListView 中的其他项目被选中。
-
我还在代码隐藏中添加了一个
ItemSelected事件处理程序,并且在初始项目选择后它不会触发。当所选项目更改时,ListView 似乎没有广播。
标签: xaml xamarin xamarin.forms