仅供参考,我在S.O中发现了一个类似的question,但它的答案附有一个断开的链接。它没有帮助我。
这就是我所拥有的。
然后:
我的视图中有一个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();
}
}
我的问题是如何实现这个spnl_Tapped()??
答案 0 :(得分:1)
在触发事件时,您应该考虑使用行为SDK 来调用方法。添加对Behaviors SDK的引用(来自扩展),然后将这些引用添加到XAML页面。
xmlns:Interactions="using:Microsoft.Xaml.Interactions"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
您可以使用CallMethodAction
EventTriggerBehavior
来调用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>
编辑:还有另一种方法。在视图模型中有一个指向spnl_tapped
的委托的命令。
public class ClassIWroteInViewModel:ViewModelBase{
public RelayCommand TapCommand
{
get;
private set;
}
public ClassIWroteInViewModel()
{
TapCommand=new RelayCommand(spnl_Tapped);//delegate to spnl_tapped viewmodel method
}
public ImageSource imgImage { get; set; }
public string Title { get; set; }
private async void spnl_Tapped()
{
IReadOnlyList<IStorageItem> PicturesLibrary = await KnownFolders.PicturesLibrary.GetFoldersAsync();
}
}
现在在代码隐藏..
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
}
答案 1 :(得分:0)
由于您将此问题标记为“mvvm-light”,我假设您使用的是mvvmlight。你可以访问这篇文章: