2010-12-17 3 views
3

Je suis nouveau sur WPF et même plus récent sur MVVM. J'ai mis en place une application simple pour essayer de comprendre WPPF. Dans mon application, j'ai ce qui suit:Question pop-up MVVM

MainWindow.xaml -> J'ai un bouton. Je veux que si la souris passe au-dessus de ce bouton, je veux avoir une fenêtre contextuelle simple.

MainWindowViewModel -> J'ai créé une propriété (popupstatus) que j'utiliserais comme déclencheur pour mon gestionnaire d'événement mouseover.

MyPopUp.xaml -> Dans cette vue, j'ai configuré les détails du popup. Je veux utiliser la propriété de MainWindowViewModel pour déclencher si elle devrait apparaître ou non.

Mais même après tout cela, j'ai deux problèmes: Un que je ne peux pas sembler utiliser l'animation pour la propriété que j'ai créée dans mon MainWindowViewModel dans mon fichier MainWindow.xaml. Je reçois un "Impossible de résoudre toutes les références de propriété dans le chemin de propriété" PopUpStatus "." . L'autre est que je ne peux pas me lier à cette propriété dans mon code pop-up non plus. Par la suite je veux avoir un viewmodel pour le popup qui fera quelques trucs plus avancés.

Merci pour votre aide :)

MainWindow.xaml:

 <Button.Triggers> 
      <EventTrigger RoutedEvent="MouseEnter"> 
       <EventTrigger.Actions> 
        <BeginStoryboard> 
         <Storyboard> 
          <BooleanAnimationUsingKeyFrames Storyboard.Target="{Binding .}" Storyboard.TargetProperty="PopUpStatus"> 
           <DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:2"/> 
          </BooleanAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger.Actions> 
      </EventTrigger> 
      <EventTrigger RoutedEvent="MouseLeave"> 
       <EventTrigger.Actions> 
        <BeginStoryboard> 
         <Storyboard> 
          <BooleanAnimationUsingKeyFrames Storyboard.TargetName="FiberPopUp" Storyboard.TargetProperty="IsOpen"> 
           <DiscreteBooleanKeyFrame Value="False" KeyTime="0:0:2"/> 
          </BooleanAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger.Actions> 
      </EventTrigger> 
     </Button.Triggers> 
    </Button> 
</Grid> 

MainWindowViewModel: privé bool _PopUpStatus = false; MainWindowViewModel publique() { }

public bool PopUpStatus 
    { 
     get 
     { 
      return _PopUpStatus; 
     } 
     set 
     { 
      _PopUpStatus = value; 
      RaisePropertyChanged("PopUpStatus"); 
     } 

    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected void RaisePropertyChanged(string name) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(name)); 
    } 

de myPopUp.xaml ->

 <StackPanel Width="auto" Height="auto" > 
      <TextBlock Background="White" Foreground="Black" Text="This is a test."/> 
      <Button Content="ClosePopUp" Click="PopUpClose" /> 

     </StackPanel> 

    </Popup> 



</Grid> 

Répondre

0

vous devez avoir la fenêtre pop-up dans votre mainwindowview en un état replié, puis en utilisant visualsta temanager vous avez plusieurs conditions qui vous permettraient de changer la visibilité de cette vue, avec un rectangle gris ...

c'est comment je l'ai fait pour mes applications. et j'ai en fait le menu contextuel utilisé comme un service ...

<Grid wpfi:VisualStateAssistant.CurrentVisualState="{Binding Path=CurrentVisualState}"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="640" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="480" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="ActiveFormStateGroup"> 
       <VisualStateGroup.Transitions> 

       </VisualStateGroup.Transitions> 
       <VisualState x:Name="Searching"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="SearchHeaderView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="SearchNavigationView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="SearchResultsView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="DoctorsModuleShell"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="DoctorsModuleNavigationView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 

       </VisualState> 
       <VisualState x:Name="DoctorEdit"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="SearchHeaderView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="SearchNavigationView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="SearchResultsView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="DoctorsModuleShell"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="DoctorsModuleNavigationView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 

       </VisualState> 

      </VisualStateGroup> 
      <VisualStateGroup x:Name="VisualAlertsStateGroup"> 
       <VisualStateGroup.Transitions> 

       </VisualStateGroup.Transitions> 
       <VisualState x:Name="DialogShowing"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="rectangle"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="DialogNotShowing"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="rectangle"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="IsWaiting"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="rectangle"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="WaitControl"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="IsNotWaiting"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="rectangle"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="WaitControl"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 

      </VisualStateGroup> 
      <VisualStateGroup x:Name="DialogFormsStateGroup"> 
       <VisualStateGroup.Transitions> 

       </VisualStateGroup.Transitions> 
       <VisualState x:Name="ShowContactInfoEdit"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="rectangle"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="ContactInfoDatagridView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 

       </VisualState> 
       <VisualState x:Name="HideContactInfoEdit"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="rectangle"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="ContactInfoDatagridView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 

         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 

       </VisualState> 
       <VisualState x:Name="ShowDoctorTaxonomyEdit"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="rectangle"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="DoctorsTaxonomyEditView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 

         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
       <VisualState x:Name="HideDoctorTaxonomyEdit"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="rectangle"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="DoctorsTaxonomyEditView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 

         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 

      </VisualStateGroup> 
      <VisualStateGroup x:Name="QuickEditViewStateGroup"> 
       <VisualStateGroup.Transitions> 
       </VisualStateGroup.Transitions> 

       <VisualState x:Name="ShowQuickEditDoctorOfficeView"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="rectangle"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="QuickEditDoctorOfficeView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Visible}" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 

       </VisualState> 

       <VisualState x:Name="HideQuickEditDoctorOfficeView"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="rectangle"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" 
                 Storyboard.TargetName="QuickEditDoctorOfficeView"> 
          <DiscreteObjectKeyFrame KeyTime="0" 
                Value="{x:Static Visibility.Collapsed}" /> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 

       </VisualState> 

      </VisualStateGroup> 
     </VisualStateManager.VisualStateGroups> 

     <DockPanel Grid.Column="0" 
        Grid.Row="0" 
        Grid.ColumnSpan="3" 
        Grid.RowSpan="3"> 

      <!--TOP--> 
      <Grid ShowGridLines="False" 
        DockPanel.Dock="Top"> 

       <views:SearchHeaderView x:Name="SearchHeaderView" 
             Margin="0,0,0,5" /> 

      </Grid> 
      <!--BOTTOM--> 
      <Grid ShowGridLines="false" 
        DockPanel.Dock="Bottom"> 

       <views:SearchNavigationView x:Name="SearchNavigationView" /> 
       <views:DoctorsModuleNavigationView x:Name="DoctorsModuleNavigationView" 
                Visibility="Collapsed" /> 

      </Grid> 

      <!--FILL--> 
      <Grid ShowGridLines="False"> 

       <views:SearchResultsShell x:Name="SearchResultsView"> 
        <views:SearchResultsShell.DataContext> 
         <vm:SearchResultsViewModel /> 
        </views:SearchResultsShell.DataContext> 
       </views:SearchResultsShell> 
       <views:DoctorsModuleShell x:Name="DoctorsModuleShell" 
              Visibility="Collapsed" /> 
      </Grid> 

     </DockPanel> 
     <Rectangle x:Name="rectangle" 
        RadiusX="2" 
        RadiusY="2" 
        Grid.Column="0" 
        Grid.Row="0" 
        Grid.ColumnSpan="3" 
        Grid.RowSpan="3" 
        Fill="{StaticResource modalFormHitTestRectangleBrush}" 
        IsHitTestVisible="True" 
        Visibility="Collapsed" /> 

     <controls:WaitingControl x:Name="WaitControl" 
           Width="100" 
           Height="100" 
           Visibility="Collapsed" 
           Grid.Column="1" 
           Grid.Row="1" /> 

     <views:ContactInfoDatagridView x:Name="ContactInfoDatagridView" 
             Grid.Column="1" 
             Grid.Row="1" 
             Visibility="Collapsed" /> 
     <views:DoctorsTaxonomyEditView x:Name="DoctorsTaxonomyEditView" 
             Grid.Column="1" 
             Grid.Row="1" 
             Visibility="Collapsed" /> 

     <views:QuickEditDoctorOfficeView x:Name="QuickEditDoctorOfficeView" 
             Grid.Column="1" 
             Grid.Row="1" 
             Visibility="Collapsed" /> 
    </Grid> 

il semble beaucoup plus déroutant qu'il est vraiment ... vous liez essentiellement à un VisualState en vous modèle de la vue principale, alors vous activer et de désactiver les états visuels en fonction de sa valeur.