【问题标题】:SelectedItem binding is not updating the ViewModelSelectedItem 绑定未更新 ViewModel
【发布时间】:2018-12-20 02:40:51
【问题描述】:

我觉得我错过了一些明显的东西,因为这太简单了。在此先感谢您的帮助。我正在努力在 Xamarin 应用程序中绑定简单 ListView 的 SelectedItem。我正在 UWP 上进行测试,并且正在使用 Prism 的 MVVM BindableBase 基类。这是我正在经历的:

  1. 页面加载,列表中没有任何内容被选中。
  2. 我在列表中选择了一个项目。
  3. SelectedGrade 的 setter 使用 valuenull 调用。
  4. 之后,选择项目不会导致调用 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


【解决方案1】:

看起来这是 Xamarin 中的一个错误。我从 Xamarin.Forms 3.0.0.550146 升级到 3.1.0.637273,现在它可以工作了。

【讨论】:

    【解决方案2】:

    当 List 未绑定到具有 SelectedItem 的视图模型并且 Xamarin 形成 5.0.0.2244 时,我遇到了类似的问题。 在设置绑定上下文之前,通过将 List 属性的默认值设置为 new List() 对象而不是视图模型中的 null 值来解决此问题。在该绑定开始工作之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      相关资源
      最近更新 更多