如何解决绑定整个项目的 XAML 无法识别我的集合中可观察项目中的属性更改
如果我绑定到整个项目,如何让我的可观察项目集合中的项目更新被识别?
我有一个实现 Codec
的类 INotifyPropertyChanged
:
public class Codec : INotifyPropertyChanged
{
private bool _isEnabled;
public bool IsEnabled
{
get => _isEnabled;
set
{
_isEnabled = value;
OnPropertyChanged(); // Raises PropertyChanged
}
}
...
}
然后我有一个带有 Codec
:s 的可观察集合的视图模型。
public class CodecsViewModel : INotifyPropertyChanged
{
public ObservableCollection<Codec> Codecs { get; }
...
}
以及列出编解码器的视图,其中容器的可访问性字符串绑定到每个单独的 Codec
项目:
<CollectionView ItemsSource="{Binding Codecs}">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout
AutomationProperties.Name="{Binding .,Converter={StaticResource CodecPresenter}}">
...
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
<CollectionView>
当我更改单个 IsEnabled
项目的 Codec
状态时,我希望更新触发对我的 CodecPresenter
转换器的新调用,以便 AutomationProperties.Name
属性得到更新。然而,事实并非如此。
在 PropertyChanged
集合上手动提高 Codecs
没有帮助。尽管项目(引用)保持不变,但有什么方法可以向 AutomationProperties.Name
绑定发出信号,表明项目内容已更改?
解决方法
向模型添加 Self
属性
public Codec Self {
get {
return this;
}
}
public bool IsEnabled
{
get => _isEnabled;
set
{
_isEnabled = value;
OnPropertyChanged();
OnPropertyChanged(Self);
}
}
然后绑定到它
AutomationProperties.Name="{Binding Self,Converter={StaticResource CodecPresenter}}">
想法源自 Xamarin 论坛上的此 post
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。