我有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
添加/删除元素时,视图会更新(如预期的那样)。
非常感谢任何建议/想法!
答案 0 :(得分:6)
您需要在viewmodel类上实现INotifyPropertyChanged
。
ObservableCollection<T>
类仅处理有关集合本身是否已更改的通知 - 添加/删除的项目/等。它不处理有关各个项目本身的属性何时更改的通知。
答案 1 :(得分:0)
Entry有一个名为OnTextChanged的事件名称(可以用来启用按钮,可以在Xaml或后面的代码中完成。
关于listView没有刷新你是否尝试设置&#34; MyList&#34; ObservableCollection又来了吗?哪个触发了View Model的OnPropertyChanged事件?