我有一个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>
答案 0 :(得分:0)
只是一个猜测,但您是否尝试过绑定到基础数据的ID而不将绑定的DataSource设置为视图源?像这样:
<Setter Property="Tag" Value="{Binding ID}"/>
样式中的绑定应该绑定到MenuItem本身的DataContext,这是MenuItem表示的项目。像你正在做的那样绑定到视图源可能会让人感到困惑。