我有一个ObservableCollection<MyEntity>
,MyEntity
有一个IsChecked
属性,其中包含PropertyChanged
个事件。
我有一个Button
,当IsEnabled
的{{1}}中至少有一个被检查时,我想将true
属性更改为MyEntity
。
我创建了一个转换器,它取MyObservableCollection
并在至少检查ObservableCollection
时返回true。
但是返回MyEntity
。
怎么了 ?谢谢你的帮助。
XAML
return "null"
C#Converter
<Window.Resources>
<CollectionViewSource x:Key="MyObservableCollection"/>
<src:MyConverter x:Key="MyConverter"/>
</Window.Resources>
<Button IsEnabled="{Binding Converter={StaticResource MyConverter}, Source={StaticResource MyObservableCollection}}"/>
答案 0 :(得分:1)
由于StaticResources在初始化时被解析,即在InitializeComponent()
时解析,但直到那时你的集合还没有初始化,这就是为什么空值被传递给转换器的原因。
因此,更好的选择是在您的代码中移动该属性并绑定到该属性,因为InitializeComponent()
之后将重新绑定绑定。在代码隐藏中创建属性 -
public CollectionViewSource MyObservableCollection { get; set; }
并绑定到您的按钮 -
<Button IsEnabled="{Binding MyObservableCollection, RelativeSource=
{RelativeSource AncestorType=Window}, Converter={StaticResource MyConverter}}"/>
答案 1 :(得分:1)
我认为你的绑定是错误的。转换器想要的是基础集合而不是CollectionView
。在CollectionViewSource.Source
之后设置InitializeComponent()
,Binding将被刷新。
<Button IsEnabled="{Binding Path=SourceCollection,
Converter={StaticResource MyConverter},
Source={StaticResource MyObservableCollection}}" />