1

私はObservableCollection<MyEntity>とイベントMyEntityのあるIsCheckedプロパティを持っていますPropertyChanged。があり、少なくとも 1 つがチェックされている場合にプロパティをButton変更したいと考えています。少なくともa がチェックされたときに、 を受け取り、true を返すコンバーターを作成しました。しかし、は返されます。なにが問題ですか ?ご協力ありがとうございました。IsEnabledtrueMyEntityMyObservableCollectionObservableCollectionMyEntityreturn "null"

XAML

<Window.Resources>
    <CollectionViewSource x:Key="MyObservableCollection"/>
    <src:MyConverter x:Key="MyConverter"/>
</Window.Resources>
<Button IsEnabled="{Binding Converter={StaticResource MyConverter}, Source={StaticResource MyObservableCollection}}"/>

C# コンバーター

class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (null == value)
            return "null";

        ReadOnlyObservableCollection<object> items = (ReadOnlyObservableCollection<object>)value;

        List<MyEntity> myEntities = (from i in items select (MyEntity)i).ToList();

        foreach (MyEntity entity in myEntities)
        {
            if (entity.IsChecked)
            {
                return true;
            }
        }
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new System.NotImplementedException();
    }
}
4

2 に答える 2

1

あなたのバインディングが間違っていると思います。コンバーターが必要とするのは、CollectionView. CollectionViewSource.Sourceafterを設定するInitializeComponent()と、Binding が更新されます。

<Button IsEnabled="{Binding Path=SourceCollection,
                            Converter={StaticResource MyConverter},
                            Source={StaticResource MyObservableCollection}}" />
于 2012-08-14T19:09:41.687 に答える
1

StaticResources はそれ自体の初期化時に解決されるため、つまりInitializeComponent()その時点まではコレクションがまだ初期化されていないため、null 値がコンバーターに渡されます。したがって、より良い選択は、コード ビハインドでそのプロパティを移動し、そのプロパティにバインドすることですInitializeComponent()。コード ビハインドでプロパティを作成します。

public CollectionViewSource MyObservableCollection { get; set; }

ボタンにバインドします-

    <Button IsEnabled="{Binding MyObservableCollection, RelativeSource=
{RelativeSource AncestorType=Window}, Converter={StaticResource MyConverter}}"/>
于 2012-08-14T19:08:30.073 に答える