gpt4 book ai didi

c# - MVVM 光 : RelayCommand : define it lazy or in constructor?

转载 作者:太空狗 更新时间:2023-10-30 00:21:53 24 4
gpt4 key购买 nike

关于如何在 ViewModel 中定义一个 RelayCommand 有几个例子:

选项 1(惰性):

/// <summary>
/// Gets the LogOnCommand.
/// </summary>
/// <value>The LogOnCommand.</value>
public RelayCommand<LogOnUser> LogOnCommand
{
get
{
if (this.logOnCommand == null)
{
this.logOnCommand = new RelayCommand<LogOnUser>(
action =>
{
// Action code...
},
g => g != null);
}

return this.logOnCommand;
}
}

选项 2(在构造函数中)

/// <summary>
/// Initializes a new instance of the <see cref="LogOnFormViewModel"/> class.
/// </summary>
public LogOnFormViewModel()
{
this.logOnCommand = new RelayCommand<LogOnUser>(
action =>
{
// Action code...
},
g => g != null);
}

/// <summary>
/// Gets the LogOnCommand.
/// </summary>
/// <value>The LogOnCommand.</value>
public RelayCommand<LogOnUser> LogOnCommand {get; private set;}

什么是最好/最清晰的设计?

最佳答案

这真的取决于你喜欢什么风格。如果可以避免的话,大多数人不喜欢在属性 getter 中有一堆逻辑。

就个人而言,我更喜欢有一个真正的方法来调用而不是匿名方法。我的 ViewModel 看起来像这样。

public class MyViewModel : ViewModelBase
{
public RelayCommand<CommandParam> MyCommand { get; private set; }

public MyViewModel()
{
CreateCommands();
}

private void CreateCommands()
{
MyCommand = new RelayCommand<CommandParam>(MyCommandExecute);
}

private void MyCommandExecute(CommandParam parm)
{
// Action code...
}
}

请注意,如果您不使用 enable 命令,则不需要调用设置它的 ctor 重载。

关于c# - MVVM 光 : RelayCommand : define it lazy or in constructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3433899/

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