2010-04-28 7 views
0

J'essaie de faire ce qui suit:WPF: Comment lier et mettre à jour l'affichage avec DataContext

J'ai un TabControl avec plusieurs onglets. Chaque points de TabControlItem.Content à PersonDetails qui est un UserControl Chaque BookDetails a une propriété de dépendance appelée IsEditMode

Je veux un contrôle en dehors de la TabControl, du nom ToggleEditButton, être mis à jour chaque fois que les modifications de l'onglet sélectionné.

Je pensais que je pouvais le faire en changeant le contexte de données ToggleEditButton, par elle ne semble pas fonctionner (mais je suis nouveau pour WPF donc je pourrais loin)

Le code changeant le contexte de données:

private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (e.Source is TabControl) 
     { 
      if (e.Source.Equals(tabControl1)) 
      { 
       if (tabControl1.SelectedItem is CloseableTabItem) 
       { 
        var tabItem = tabControl1.SelectedItem as CloseableTabItem; 
        RibbonBook.DataContext = tabItem.Content as BookDetails; 
        ribbonBar.SelectedTabItem = RibbonBook; 
       } 
      } 
     } 
    } 

DependencyProperty sous BookDetails:

public static readonly DependencyProperty IsEditModeProperty = 
     DependencyProperty.Register("IsEditMode", typeof (bool), typeof (BookDetails), 
            new PropertyMetadata(true)); 
    public bool IsEditMode 
    { 
     get { return (bool)GetValue(IsEditModeProperty); } 
     set 
     { 
      SetValue(IsEditModeProperty, value); 
      SetValue(IsViewModeProperty, !value); 
     } 
    } 

Et le XAML concerné:

<odc:RibbonTabItem Title="Book" Name="RibbonBook"> 
    <odc:RibbonGroup Title="Details" Image="img/books2.png" IsDialogLauncherVisible="False"> 
     <odc:RibbonToggleButton Content="Edit" 
      Name="ToggleEditButton" 
      odc:RibbonBar.MinSize="Medium" 
      SmallImage="img/edit_16x16.png" 
      LargeImage="img/edit_32x32.png" 
      Click="Book_EditDetails" 
      IsChecked="{Binding Path=IsEditMode, Mode=TwoWay}"/> 
    ... 

Il y a deux choses que je veux accomplir, Avoir le bouton reflète la IsEditMode de l'onglet visible et que le bouton modifier la valeur de la propriété sans code derrière (si es posible)

Toute aide serait grandement apprci.

Répondre

1

Vous pouvez accomplir ce que vous voulez en se liant directement à la SelectedItem du TabControl en utilisant la ElementName de liaison:

<odc:RibbonTabItem Title="Book" Name="RibbonBook"> 
    <odc:RibbonGroup Title="Details" Image="img/books2.png" IsDialogLauncherVisible="False"> 
     <odc:RibbonToggleButton Content="Edit" 
      Name="ToggleEditButton" 
      odc:RibbonBar.MinSize="Medium" 
      SmallImage="img/edit_16x16.png" 
      LargeImage="img/edit_32x32.png" 
      Click="Book_EditDetails" 
      IsChecked="{Binding ElementName=myTabControl, Path=SelectedItem.IsEditMode, Mode=TwoWay}"/> 

myTabControl est le nom de la TabControl (la valeur de la propriété x:Name). Vous ne devriez plus avoir à gérer l'événement SelectionChanged pour mettre à jour le DataContext du bouton.

Questions connexes