2010-09-27 3 views
2

j'ai besoin de commander le feu de WP7 ApplicationBar. Malheureusement, il est impossible, mais Laurent a publié solution intéressante:MVVM Light - comment commander le feu à partir du code derrière

private void ApplicationBarMenuItemClick(object sender, System.EventArgs e) 
{ 
    var vm = DataContext as MainViewModel; 
    if (vm != null) 
    vm.MyCommand.Execute(null); 
} 

Malheureusement mon code ne voit pas derrière MainViewModel classe ou en fait une classe ViewModel du tout! La liaison de données fonctionne bien, donc ViewModel fonctionne correctement. Qu'est-ce que je fais mal?

Répondre

0

Mettez un point d'arrêt sur cette ligne de code et vérifiez quelle est la valeur de DataContext lorsque le point d'arrêt est atteint. Si c'est nul, vous avez probablement oublié de définir le contexte de données dans votre vue. Si le DataContext n'est pas nul, assurez-vous qu'il est de type MainViewModel ou que la ligne appelant vm.MyCommand.Execute (null) ne sera jamais appelée.

Basé sur le code que vous avez collé, votre point de vue devrait ressembler à ceci.

<phone:PhoneApplicationPage x:Class="MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" 
    shell:SystemTray.IsVisible="True" 
    DataContext="{Binding Path=Main, Source={StaticResource Locator}}" 
    > 

    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <!-- the rest has been ommitted for simplicity --> 
    </Grid> 

    <phone:PhoneApplicationPage.ApplicationBar> 
     <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> 
      <shell:ApplicationBar.MenuItems> 
       <shell:ApplicationBarMenuItem x:Name="appBarMenuItem1" Click="ApplicationBarMenuItemClick" Text="Menu Item 1" /> 
      </shell:ApplicationBar.MenuItems> 
     </shell:ApplicationBar> 
    </phone:PhoneApplicationPage.ApplicationBar> 
</phone:PhoneApplicationPage> 

Cela suppose que votre ViewModelLocator a la propriété principal de type MainViewModel.

+0

En fait, le problème est beaucoup plus facile. J'ai jeté un oeil à quelques exemples et j'ai découvert le problème - dans votre code de page derrière vous devez ajouter un espace de noms viewmodel! Simple! – user459497

Questions connexes