Xamarin Forms ListView ObservableCollection 不更新
Xamarin Forms ListView ObservableCollection not updating
我有一个 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>
期望的结果:当用户输入条目时(绑定到 Id
),按钮应该被启用。
实际结果:当用户键入条目时,没有任何反应(我猜是因为 ObservableCollection
没有看到 viewmodel
中的变化)
注意:当我 add/delete 元素 to/from ObservableCollection
时,视图会更新(如预期的那样)。
任何 suggestions/ideas 不胜感激!
条目有一个名为 OnTextChanged 的事件名称(类似的东西,您可以使用它来启用按钮,这可以在 Xaml 或后面的代码中完成。
关于listView不刷新的问题,您有没有尝试重新设置"MyList" ObservableCollection?触发视图模型的 OnPropertyChanged 事件?
您需要在视图模型 class 上实现 INotifyPropertyChanged
。
ObservableCollection<T>
class 仅处理有关集合本身是否已更改的通知 - 项目 added/removed/etc。它不处理有关何时更改单个项目本身的属性的通知。
我有一个 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>
期望的结果:当用户输入条目时(绑定到 Id
),按钮应该被启用。
实际结果:当用户键入条目时,没有任何反应(我猜是因为 ObservableCollection
没有看到 viewmodel
中的变化)
注意:当我 add/delete 元素 to/from ObservableCollection
时,视图会更新(如预期的那样)。
任何 suggestions/ideas 不胜感激!
条目有一个名为 OnTextChanged 的事件名称(类似的东西,您可以使用它来启用按钮,这可以在 Xaml 或后面的代码中完成。
关于listView不刷新的问题,您有没有尝试重新设置"MyList" ObservableCollection?触发视图模型的 OnPropertyChanged 事件?
您需要在视图模型 class 上实现 INotifyPropertyChanged
。
ObservableCollection<T>
class 仅处理有关集合本身是否已更改的通知 - 项目 added/removed/etc。它不处理有关何时更改单个项目本身的属性的通知。