大多数 WPF mvvm 应用程序,我们在 View 模型中使用 ICommand
。但它指的是 System.Windows.Input
。所以 View 模型现在与 System.Windows.Input
命名空间紧密结合。根据我的理解, View 模型应该能够在普通的 C# winform 应用程序或 asp.net 应用程序中使用。
通常我们使用以下代码行来执行 RelayCommand
实现的命令。
private RelayCommand testCommand;// or private ICommand testCommand;
public ICommand TestCommand
{
get
{
return testCommand ??
(testCommand = new RelayCommand(param => Test()));
}
}
public void Test()
{
}
我觉得我们需要删除所有 ICommand
并改用 RelayCommand
。所以我们可以从 View 模型中删除 System.Windows
命名空间。所以最终代码看起来像这样,
private RelayCommand testCommand;
public RelayCommand TestCommand
{
get
{
return testCommand ??
(testCommand = new RelayCommand(param => Test()));
}
}
public void Test()
{
}
对这种方法有什么建议吗?或者有什么方法可以从 View 模型中消除 System.Windows
命名空间?
最佳答案
Any suggestions on this approach?
这仍然不会将您与 System.Windows.Input
分离,因为 RelayCommand
仍然必须实现 ICommand
,即使它是间接实现它.
在 ViewModel 中实现 ICommand
是为了实用而需要做的事情之一。理想情况下,ICommand
(或类似接口(interface))将在非 XAML 特定的命名空间中实现。也就是说,它直接在 Portable Class Libraries 中得到支持。 ,因此它不像一般的 XAML 那样依赖于特定框架(WPF、Silverlight、Phone 等)。
关于c# - 在 View 模型中使用 ICommand 可以吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15370129/