【问题标题】:Efficient use of the ICommand interface高效使用 ICommand 接口
【发布时间】:2016-10-03 18:21:18
【问题描述】:

我开始使用 Xamarin Forms 跨平台开发移动应用程序的项目。我正在使用 MVVM 模型,除了一些小型 WPF 应用程序之外,我对它几乎没有经验。

我正在使用 ICommand 接口在视图的 XAML 中创建命令并绑定到它们,默认情况下这涉及大量重复代码。 Xamarin.Forms 提供了 ICommand 的具体子类型 Command,它在讨论 here 中使用,我看到了两种明显的实例化它们的方法。

选项 #1 - 在构造函数中分配命令。

public class Presenter : ObservableObject
{
    public Presenter()
    {
        DoStuffCommand = new Command(DoStuff);
    }

    public ICommand DoStuffCommand { get; set; }

    private void DoStuff()
    {
        // VM stuff
    }

}

选项 #2 - 在 getter 中实例化命令

public class Presenter : ObservableObject
{
    public ICommand RunCommand { get { return new Command(DoStuff); } }

    private void DoStuff()
    {
        // VM stuff
    }

}

许多视图模型将有许多命令,方法 #2 避免在构造函数中一一分配所有这些 - 当命令操作不会改变时,我更清楚地声明此操作ICommand 本身。另一方面,这将在每次命令触发时创建一个新的 Command 实例,这显然比方法 #1 的内存效率低。

有没有人有这方面的经验,和/或可以告诉我这是否会显着影响性能?有没有办法对此进行改进,例如手动销毁 Command 对象?

谢谢!

【问题讨论】:

    标签: c# wpf mvvm xamarin


    【解决方案1】:

    选项 #2 的替代方案是为其设置一个支持字段并确保它只实例化一次:

    private ICommand _doStuffCommand;
    public ICommand DoStuffCommand =>
        _doStuffCommand = _doStuffCommand ?? new Command(DoStuff);
    
    private void DoStuff()
    {
    
    }
    

    【讨论】:

    • 太好了,谢谢 - 正是我想要的。很惊讶我没有看到这种模式被更频繁地使用。
    • 是的,真的很简单:)
    猜你喜欢
    • 2010-10-03
    • 2018-08-14
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多