1

正常に動作している XAML MenuItem DataBound ItemsSource がありますが、小さな問題があります。MenuItem を表示し、データバインドされた項目がない場合、ParentMenu は無効になり、バインド エラーなしで正常に表示されます (予想どおり、ItemsSource は空です)。ObservableCollection が変更され、項目が追加されると、バインディングが更新され、MenuItem が表示されます。ただし、ItemContainerStyle は MenuItem.Tag プロパティをデータバインドされた値に更新しません。

MenuItem は、ItemsSource が空として開始されたり、空に縮小されたりしない限り、正常に機能します。そのような問題のヒントはありますか?ItemsSource が空で始まる場合でも、ItemsSource と ItemContainerStyle を常に正しく更新したいと考えています。

XAML を以下に示します。

<MenuItem x:Name="MenuItem" Header="Menu" ItemsSource="{Binding Source={StaticResource MenuItemViewSource}}" ItemTemplate="{StaticResource MenuDataTemplate}">
    <MenuItem.ItemContainerStyle>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Tag" Value="{Binding Path=ID, Source={StaticResource MenuItemViewSource}}"/>
            <Setter Property="Background" Value="Red"/>
            <Setter Property="Opacity" Value="0.5"/>
            <EventSetter Event="Click" Handler="MenuItem_Click"/>
        </Style>
    </MenuItem.ItemContainerStyle>
    <MenuItem.Style>
        <Style TargetType="{x:Type MenuItem}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Items.Count, RelativeSource={RelativeSource Self}}" Value="0">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </MenuItem.Style>
</MenuItem>
4

1 に答える 1

0

推測ですが、バインディングの DataSource をビュー ソースに設定せずに、基になるデータの ID にバインドしようとしましたか? このような:

<Setter Property="Tag" Value="{Binding ID}"/>

スタイル内のそのようなバインディングは、MenuItem が表すアイテムである MenuItem 自体の DataContext にバインドする必要があります。あなたがやっているようにビューソースにバインドし直すと、混乱するかもしれません。

于 2009-09-02T04:12:18.497 に答える