gpt4 book ai didi

mvvm-light - RelayCommand 和 WeakReference

转载 作者:行者123 更新时间:2023-12-02 02:10:08 25 4
gpt4 key购买 nike

我有以下内容:

public MainViewModel(IDataService dataService)
{
_dataService = dataService;

NotWorkingCommand = new RelayCommand(() =>
dataService.GetData((item, error) =>
{
if (error != null)
{
// Report error here
return;
}
WelcomeTitle = item.Title;
}));
}

有人可以解释一下为什么我的 RelayCommand 会在一段时间后停止触发吗?我怀疑它与 RelayCommand 中使用的 WeakReference 有关,但我没有使用 WeakReference 的经验。如果我改用 _dataService.GetData,它将起作用。

最佳答案

在您的 lambda 表达式中,dataService.GetData 指令将不起作用,因为变量 dataService 的范围仅限于构造函数。

相反,您应该将此引用复制到支持字段并改为调用此实例。如果您认为使用 _dataService.GetData 可以解决问题,您就接近解决方案。

private readonly IDataService _dataService;

public RelayCommand NotWorkingCommand { get; private set; }


public MainViewModel(IDataService dataService)
{
_dataService = dataService;

NotWorkingCommand = new RelayCommand(() =>
_dataService.GetData((item, error) =>
{
if (error != null)
{
// Report error here
return;
}
WelcomeTitle = item.Title;
}));
}

似乎正确创建了委托(delegate),因为在创建中继命令时(在 ctor 的范围内)存在引用,但无法在运行时调用它,因为无法正确评估它。

关于mvvm-light - RelayCommand 和 WeakReference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13281181/

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