2009-09-02 4 views
1

J'ai un XAML MenuItem DataBound ItemsSource qui fonctionne correctement, mais il y a un petit problème. Lorsque je vois le MenuItem et qu'il n'y a aucun élément de databound, le ParentMenu sera désactivé et il apparaîtra sans erreurs de liaison (comme prévu, ItemsSource est vide). Si ObservableCollection est modifié et qu'un élément est ajouté, la liaison est actualisée et le MenuItem apparaît. Toutefois, le ItemContainerStyle n'énoge pas la propriété MenuItem.Tag à la valeur de la base de données. Le MenuItem fonctionne correctement tant que ItemsSource ne démarre jamais comme vide ou n'est jamais réduit à vide. Quelqu'un at-il des conseils pour un tel problème? Je voudrais avoir le ItemsSource et ItemContainerStyle rafraîchir correctement à tout moment, même lorsque le ItemsSource commence comme videÉtrange XAML MenuItem DataBound ItemsSource Actualiser Problème après vide ItemsSource

XAML est illustré ci-dessous:

<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> 

Répondre

0

Juste une supposition, mais avez-vous essayé de se lier à l'ID les données sous-jacentes sans définir DataSource de la liaison à la source de vue? Comme ceci:

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

Une liaison de ce genre dans un style doit se lier à la DataContext du MenuItem lui-même, qui est l'élément que l'MenuItem représente. Relier la source de vue comme vous le faites peut être source de confusion.

+0

Ai-je besoin de définir le DataContext sur le MenuItem qui a l'ensemble ItemsSource? – Luke

+0

Non, le DataContext passe à chaque élément de menu "enfant" de la liaison ItemsSource dans l'élément de menu "parent". –

Questions connexes