1

我有一个工作正常的 XAML MenuItem DataBound ItemsSource 但是有一个小问题。当我查看 MenuItem 并且没有数据绑定项时,ParentMenu 将被禁用并且它看起来很好,没有绑定错误(正如预期的那样,ItemsSource 是空的)。如果修改了 ObservableCollection 并添加了项,则绑定刷新并出现 MenuItem。但是,ItemContainerStyle 不会将 MenuItem.Tag 属性更新为数据绑定值。

只要 ItemsSource 从不以空开始或从不减少为空,MenuItem 就可以正常工作。有人对此类问题有任何提示吗?我想让 ItemsSource 和 ItemContainerStyle 始终正确刷新,即使 ItemsSource 开始为空

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

只是一个猜测,但是您是否尝试过绑定到底层数据的 ID 而不将绑定的 DataSource 设置为视图源?像这样:

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

样式中的类似绑定应该绑定到 MenuItem 本身的 DataContext,它是 MenuItem 所代表的项目。像您正在做的那样绑定回视图源可能会混淆它。

于 2009-09-02T04:12:18.497 回答