C# 如何使用视图模型实现代码隐藏功能?

C# 如何使用视图模型实现代码隐藏功能?,c#,mvvm,windows-phone-8.1,mvvm-light,C#,Mvvm,Windows Phone 8.1,Mvvm Light,仅供参考,我在S.O.中发现了一个类似的,但它的答案有一个断开的链接。这对我没有帮助 这就是我所拥有的 然后: 我看到了一个StackPanel。使用代码隐藏,在它的tap事件中,我编写了一个用于执行特定任务的函数 <StackPanel x:Name="spnl" Tapped="spnl_Tapped" > <Grid> <Grid.RowDefinitions> <RowDefinition Height="*

仅供参考,我在S.O.中发现了一个类似的,但它的答案有一个断开的链接。这对我没有帮助

这就是我所拥有的

然后:

我看到了一个StackPanel。使用代码隐藏,在它的tap事件中,我编写了一个用于执行特定任务的函数

<StackPanel x:Name="spnl" Tapped="spnl_Tapped" >
   <Grid>
      <Grid.RowDefinitions>
          <RowDefinition Height="*"/>
          <RowDefinition Height="Auto"/>
      </Grid.RowDefinitions>
     <Image  Source="{Binding imgImage}"/>
     <TextBlock Grid.Row="1" Text="{Binding Title}"/>
  </Grid>
</StackPanel>

现在:

我的视野中有一个StackPanel。我在ViewModel中编写了一个类

 public class ClassIWroteinViewModel: ViewModelBase
    {   
        public ImageSource imgImage { get; set; }
        public string Title { get; set; }      
        private async void spnl_Tapped()
        {
           IReadOnlyList<IStorageItem> PicturesLibrary = await KnownFolders.PicturesLibrary.GetFoldersAsync();                
        }
    }
公共类ClassIwroteInvewModel:ViewModelBase
{   
公共图像源imgImage{get;set;}
公共字符串标题{get;set;}
私有异步void spnl_Tapped()
{
IReadOnlyList PicturesLibrary=等待KnownFolders.PicturesLibrary.GetFoldersAsync();
}
}

我的问题是如何实现这个SPNLXTAdvd(?)?/P>< P>你应该考虑在事件触发时使用<强>行为SDK < /强>来调用一个方法。添加对行为SDK的引用(来自扩展),然后将这些引用添加到XAML页面

xmlns:Interactions="using:Microsoft.Xaml.Interactions"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
您可以在
EventTriggerBehavior
上使用
CallMethodAction
调用viewmodel方法

<StackPanel>
  <Grid>
     <Grid.RowDefinitions>
      <RowDefinition Height="*"/>
      <RowDefinition Height="Auto"/>
  </Grid.RowDefinitions>
 <Image  Source="{Binding imgImage}"/>
 <TextBlock Grid.Row="1" Text="{Binding Title}"/>
 </Grid>
     <Interactivity:Interaction.Behaviors>
         <Core:EventTriggerBehavior EventName="Tapped">
                <Core:CallMethodAction MethodName="spnl_tapped"/>
            </Core:EventTriggerBehavior>
        </Interactivity:Interaction.Behaviors>
</StackPanel>
现在在后面的代码中

private void spnl_Tapped(object sender, TappedRoutedEventArgs e)
{
     var vm=this.DataContext as ClassIWroteInViewModel; //get the view model
     vm.TapCommand.Execute(null);//execute the command
}

我用过一次。是否有其他方法(纯代码)(可能使用命令)可以实现这一点@SridharSo,在spnl_内点击,1)获取视图模型2)执行命令后,我应该编写功能。对吧?@sridhart命令将调用在视图模型中定义的异步方法。您可以在那里编写您的功能。因此,您不需要在代码隐藏方法中包含更多功能。Ok。太好了。但委托给spnl_的viewmodel方法会产生错误。表示Tapped是一个“属性”,但用作“类型”。我对这个世界还不熟悉@SridharI编辑了这篇文章,其中包含了整个视图模型的代码。它应该会起作用。发生错误的原因可能是
Tapped
是一个事件名称,并且我已更改了命令名称。
private void spnl_Tapped(object sender, TappedRoutedEventArgs e)
{
     var vm=this.DataContext as ClassIWroteInViewModel; //get the view model
     vm.TapCommand.Execute(null);//execute the command
}