【问题标题】:Xamarin Forms ListView ObservableCollection not updatingXamarin Forms ListView ObservableCollection 未更新
【发布时间】:2016-10-03 17:54:34
【问题描述】:

我有一个ListView,它绑定到一个由viewModels 组成的ObservableCollection

viewModel 如下所示:

public string Id{ get; set; }
public string Name{ get; set; }
public bool HasId
{
    get { return !(String.IsNullOrEmpty(Id)); }
}

在前端 xaml 中:

<ListView x:Name="MyList" ItemsSource="{Binding MyList}">
  <ListView.ItemTemplate>
    <DataTemplate>
      <ViewCell>
        <StackLayout>
          <Label Text="{Binding Name" FontSize="Small"/>
          <StackLayout Spacing="20">
            <Entry Text="{Binding Id}"/>
            <Button Text="Create Profile" IsEnabled="False">
              <Button.Triggers>
                <DataTrigger TargetType="Button" Binding="{Binding HasId}" Value="True">
                  <Setter Property="IsEnabled" Value="True"/>
                </DataTrigger>
              </Button.Triggers>
            </Button>
          </StackLayout>
        </StackLayout>
      </ViewCell>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>

Desired Result:当用户输入条目(绑定到Id)时,应该启用按钮。

实际结果:当用户输入条目时,什么也没有发生(我猜是因为ObservableCollection 没有看到viewmodel 内的变化)

注意:当我在ObservableCollection 中添加/删除元素时,视图会更新(如预期的那样)。

非常感谢任何建议/想法!

【问题讨论】:

  • 你的 ViewModel 类需要实现 INotifyPropertyChanged
  • @Jason 谢谢!第一次看文档的时候没看懂,现在明白了。

标签: listview xamarin.forms observablecollection


【解决方案1】:

您需要在视图模型类上实现INotifyPropertyChanged

ObservableCollection&lt;T&gt; 类仅处理有关集合本身是否已更改的通知 - 添加/删除/等项目。它不处理单个项目本身的属性何时更改的通知。

【讨论】:

    【解决方案2】:

    Entry 有一个名为 OnTextChanged 的​​事件名称(类似的东西,您可以使用它来启用按钮,这可以在 Xaml 或后面的代码中完成。

    关于 listView 未刷新,您是否尝试再次设置“MyList”ObservableCollection?哪个触发了视图模型的 OnPropertyChanged 事件?

    【讨论】:

      猜你喜欢
      • 2018-10-16
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 2019-10-25
      相关资源
      最近更新 更多