0

我想创建一些UserControl并实现此代码

public dynamic CommandContext { set; get; }

为了保持对我需要执行的方法和参数的一些参考。(如果有可能)

所以在同一个班级UserControl我得到了

#region 应用命令

    private ICommand _applyCommand;

    public ICommand ApplyCommand
    {
        get
        {
            if (_applyCommand == null)
            {
                _applyCommand = new RelayCommand(ApplyObject,  CanApply);
            }
            return _applyCommand;
        }
    }

    private void ApplyObject()
    {
        // use CommandContext and execute method od the ANY CLASS It has
    }

    private bool CanApply()
    {
        bool result = true;
        // Verify command can be executed here
        return result;
    }

    #endregion

所以我想知道我是否可以像这样直接调用这个方法

private void ApplyObject()
{
      CommandContext.CloseWindow();
}

谢谢!

4

1 回答 1

3

只是为了说清楚:

您应该使用Actionor Action<T>

public class SomeClassThatCallsAnAction
{
    public Action SomeAction {get;set;}

    private void CallTheAction()
    {
        if (SomeAction != null)
           SomeAction();
    }
}

public class ClassThatDefinesTheAction:
{
    private SomeClassThatCallsAnAction instance;

    private void SomeMethod()
    {
          instance = new SomeClassThatCallsAnAction();
          instance.SomeAction = ThisIsTheAction;
    }

    private void ThisIsTheAction()
    {
        MessageBox.Show("Action Executed!!);
    }
}

解释:

ThisIsTheAction()方法被分配给 的SomeAction属性instance。然后,当instance调用SomeAction()Action(它持有对该ThisIsTheAction()方法的引用)时,将执行该方法。

笔记:

UI 可能不适合这样做

创建适当的 ViewModel 来定义您的应用程序逻辑。

于 2013-04-18T20:36:18.120 回答