• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

MVVMToolkit入门教程

武飞扬头像
步、步、为营
帮助1

MVVMToolkit

MVVMLight已经停止维护,可以考虑MVVMToolkit来替代,MVVMToolkit官方文档两个框架的基本使用方法类似,下面介绍一下不同之处(建议先看上篇介绍MVVMLight的文章)。
MVVMToolkit是一个现代、快速且模块化的 MVVM 库。 它是 .NET 社区工具包的一部分,
平台和运行时独立 - .NET Standard 2.0、 .NET Standard 2.1 和 .NET 6。易于选取和使用,没有严格的要求,灵活使用。

Messenger

//发送
WeakReferenceMessenger.Default.Send<string>("hello");

//注册1
WeakReferenceMessenger.Default.Register<string>(this, DoMessage);
//注册2
WeakReferenceMessenger.Default.Register<MessageObject>(this, DoMessage);
//注册3,不需要Register
//类的继承,使用ObservableRecipient替换ObservableObject,并继承IRecipient接口
//用来接收消息,这样就不需要注册
//必须打开消息开关
this.IsActive = true;
public void Receive(string message)
{
   //凡是相应类型的都可以收到信息
   //如何实现精准接收,要自定义一个类
}

IoC

仿照MVVMLight,新建ViewModelLocator类。

需要nuget安装Microsoft.Extensions.DependencyInjection

public class ViewModelLocator
 {
     public static IServiceProvider serviceProvider { get; private set; }
     public ViewModelLocator()
     {
         serviceProvider = GetService();
     }

    private IServiceProvider GetService()
     {
         //实例化容器对象
         var service = new ServiceCollection();

         //注册项目需要的对象

         service.AddSingleton<MainViewModel>();
         return service.BuildServiceProvider();
     }

     public MainViewModel Main
     {
         get => serviceProvider.GetService<MainViewModel>();
     }
 }

App.xmal

<Application.Resources>
    <vm:ViewModelLocator x:Key="Locator" />
</Application.Resources>

window.xaml中使用

DataContext="{Binding Source={StaticResource Locator},Path=Main}"

AsnycRelayCommand

异步命令

public ICommand BtnCommand { set; get; }
//异步命令必须在构造方法中创建
BtnCommand = new AsyncRelayCommand(DoCommand);
private async Task<String> DoCommand()
{
    await Task.Delay(3000);
    return "hello";
}

如果在页面要获取异步命令的返回值,需要做一个转换

public class TaskResultConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is Task task)
        {
            //  安装了Microsoft.Toolkit
            return task.GetResultOrDefault();
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

页面

<Window.Resources>
    <local:TaskResultConverter x:Key="taskResult" />
</Window.Resources>
<TextBlock Text="{Binding BtnCommand.ExecutionTask, Converter={StaticResource taskResult}}" />
<Button Command="{Binding BtnCommand}" Content="OK" />

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfkbig
系列文章
更多 icon
同类精品
更多 icon
继续加载