Xamarin表单ListView ObservableCollection未更新

时间:2016-06-03 15:27:14

标签: listview xamarin.forms observablecollection

我有ListView绑定到由ObservableCollection组成的viewModels

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>

所需结果:当用户输入条目(绑定到Id)时,应启用该按钮。

实际结果:当用户输入内容时,没有任何反应(我猜测因为ObservableCollection没有看到viewmodel内的变化)

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

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

2 个答案:

答案 0 :(得分:6)

您需要在viewmodel类上实现INotifyPropertyChanged

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

答案 1 :(得分:0)

Entry有一个名为OnTextChanged的事件名称(可以用来启用按钮,可以在Xaml或后面的代码中完成。

关于listView没有刷新你是否尝试设置&#34; MyList&#34; ObservableCollection又来了吗?哪个触发了View Model的OnPropertyChanged事件?