我想知道使用relay命令调用刷新屏幕的函数有什么好处。在我的应用程序中,我有以下中继命令设置。
private RelayCommand _refreshSitesCommand;
public RelayCommand RefreshSitesCommand
{
get { return _refreshSitesCommand ?? (_refreshSitesCommand = new RelayCommand(RefreshSites)); }
}
private RelayCommand _refreshProvidersCommand;
public RelayCommand RefreshProvidersCommand
{
get { return _refreshProvidersCommand ?? (_refreshProvidersCommand = new RelayCommand(RefreshProviders)); }
}
private async void RefreshSites()
{
var sitesStats = await _dataService.GetSiteStats();
if (sitesStats != null)
{
SiteStats.Clear();
foreach (var site in sitesStats)
{
SiteStats.Add(new SiteStatsViewModel(site));
}
SelectedSite = SiteStats[0];
}
}
private async void RefreshProviders()
{
var providers = await _dataService.GetProviders();
if (providers != null)
{
Providers.Clear();
foreach (var provider in providers)
{
Providers.Add(new ProviderViewModel(provider));
}
SelectedProvider = Providers[0];
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的代码中,我有以下调用来执行它。
RefreshProvidersCommand.Execute(null);
RefreshSitesCommand.Execute(null);
Run Code Online (Sandbox Code Playgroud)
那么为什么这比调用 RefreshSites 和 RefreshProviders 函数更好呢?那么我就不需要 RelayCommand 对象的代码。除了公开 2 个私有函数的功能之外,使用 RelayCommand 对象比仅仅公开函数并调用它们有什么好处。
MVVM 部分是为了避免 View 类中的代码隐藏。
例如,如果您希望对按钮单击做出响应,那么您可以分配 Click 事件处理程序或将 Command 属性分配给命令方法。(与 Click 事件处理程序相比,命令具有某些优势,但这不是问题。)
除了在 View 类中定义一个方法之外,没有其他好的选择来处理 Click 事件。您不能直接将 Click 事件分配给与 View 不同的类中的处理程序方法,并且您只能绑定到属性,而不能绑定到方法。
但是,你可以在命令属性分配给一个绑定到一个对象实现了ICommand接口,例如RelayCommand,并结合可以是你的视图模型对象的属性。这避免了必须在视图的代码隐藏文件中定义 Click 事件处理程序,同时使您的 ViewModel 能够轻松启用/禁用命令,而无需了解有关视图特定实现的任何信息。
人们可以争论虔诚地避免代码隐藏的优点,但这不是问题。
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |