gpt4 book ai didi

c# - 如何使用 View Model 实现代码隐藏功能?

转载 作者:行者123 更新时间:2023-12-03 10:36:10 24 4
gpt4 key购买 nike

仅供引用,我发现了一个类似的 question在 S.O 中,但它的答案附有一个断开的链接。它没有帮助我。

这就是我所拥有的。

然后:

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

<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()??

最佳答案

您应该考虑使用 行为 SDK 触发事件时调用方法。添加对 Behaviors SDK 的引用(来自扩展),然后将这些引用添加到 XAML 页面。

xmlns:Interactions="using:Microsoft.Xaml.Interactions"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"

您可以使用 CallMethodAction 调用 viewmodel 方法在 EventTriggerBehavior
<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>

编辑:还有另一种方式。有一个委托(delegate)给 spnl_tapped 的命令在 View 模型中。
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
}

关于c# - 如何使用 View Model 实现代码隐藏功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27632387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com