我有一个 ListView
绑定(bind)到 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>
想要的结果 :当用户输入条目时(绑定(bind)到
Id
),应该启用该按钮。实际结果 :当用户输入条目时,什么也没有发生(我猜是因为
ObservableCollection
没有看到 viewmodel
中的变化)注意:当我在
ObservableCollection
中添加/删除元素时, View 确实会更新(如预期的那样)。非常感谢任何建议/想法!
最佳答案
您需要执行 INotifyPropertyChanged
在 View 模型类上。ObservableCollection<T>
类仅处理有关集合本身是否已更改的通知 - 添加/删除/等项目。它不处理单个项目本身的属性何时更改的通知。
关于listview - Xamarin Forms ListView ObservableCollection 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37618209/