属性 我的 collection 中可观察项目的变化未被绑定整个项目的 XAML 识别
Property changes in the observable items in my collection is not recognized by XAML binding the entire item
如果我绑定到整个项目,如何让我的 collection 可观察项目中的项目更新被识别?
我有一个 class Codec
实现 INotifyPropertyChanged
:
public class Codec : INotifyPropertyChanged
{
private bool _isEnabled;
public bool IsEnabled
{
get => _isEnabled;
set
{
_isEnabled = value;
OnPropertyChanged(); // Raises PropertyChanged
}
}
...
}
然后我有一个 view-model,可观察到的 collection 为 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>
当我更改单个 Codec
项目的 IsEnabled
状态时,我希望更新会触发对我的 CodecPresenter
转换器的新调用,以便 AutomationProperties.Name
属性 得到更新。然而,事实并非如此。
在 Codecs
collection 上手动加注 PropertyChanged
没有帮助。有什么方法可以向 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
如果我绑定到整个项目,如何让我的 collection 可观察项目中的项目更新被识别?
我有一个 class Codec
实现 INotifyPropertyChanged
:
public class Codec : INotifyPropertyChanged
{
private bool _isEnabled;
public bool IsEnabled
{
get => _isEnabled;
set
{
_isEnabled = value;
OnPropertyChanged(); // Raises PropertyChanged
}
}
...
}
然后我有一个 view-model,可观察到的 collection 为 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>
当我更改单个 Codec
项目的 IsEnabled
状态时,我希望更新会触发对我的 CodecPresenter
转换器的新调用,以便 AutomationProperties.Name
属性 得到更新。然而,事实并非如此。
在 Codecs
collection 上手动加注 PropertyChanged
没有帮助。有什么方法可以向 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