WPF - 按钮IsEnabled绑定转换器

时间:2012-08-14 17:45:51

标签: wpf button binding converter isenabled

我有一个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}}"/>

2 个答案:

答案 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}}" />