c# - 在一个事件中重新组合按钮事件
问题描述
我使用 6 个不同的按钮做几乎相同的事情。
private void VisaCreaDoc_Click(object sender, RoutedEventArgs e)
{
ViewModel.ValidateItem(InfosPosteViewModel.CREADOC);
}
private void VisaTravaux_Click(object sender, RoutedEventArgs e)
{
ViewModel.ValidateItem(InfosPosteViewModel.TRAVAUX);
}
private void VisaRemiseOuvrageIR_Click(object sender, RoutedEventArgs e)
{
ViewModel.ValidateItem(InfosPosteViewModel.REMISEOUVRIR);
}
private void VisaRemiseOuvrageExpl_Click(object sender, RoutedEventArgs e)
{
ViewModel.ValidateItem(InfosPosteViewModel.REMISEOUVREXPL);
}
private void VisaMES_Click(object sender, RoutedEventArgs e)
{
ViewModel.ValidateItem(InfosPosteViewModel.MISEENSERVICE);
}
private void VisaEncodageArchivage_Click(object sender, RoutedEventArgs e)
{
ViewModel.ValidateItem(InfosPosteViewModel.ENCODAGEARCHIVAGE);
正如你所看到的,他们使用了一个ViewModel
带有不同参数的函数。
有没有办法将 6 个按钮事件重新组合为只有一种直接在 XAML 调用中传递参数或类似的方法以避免“代码重复”?
解决方案
不确定您是否更喜欢它,但您可以检查在处理程序中单击了哪个按钮:
void HandleButton_Click(object sender, RoutetEventArgs e)
{
if (sender is Button b)
{
if (b == VisaCreaDoc) # VisaCreaDoc is the given name of your button instace in xaml
ViewModel.ValidateItem(InfosPosteViewModel.CREADOC);
else if (b == VisaTravaux)
ViewModel.ValidateItem(InfosPosteViewModel.TRAVAUX);
else if (...) // etc.
}
}
您可以使用开关模式匹配来为它增添趣味,以摆脱if / else if / else if / ...
链条。
推荐阅读
- android - Gitlab CI UI 测试
- c# - CS0123 - 'TextChanged' 没有重载匹配委托 'EventHandler'
- ios - PDFPage.attributedString 返回错误的字体
- javascript - Rails 应用程序中的 Jquery + Ajax 使提交按钮变得不可见
- r - Integrate-Function R:match.fun(f) 中的错误
- python - 如何强迫自己更优雅地编码?
- c# - 多个列表中的最高分
- python - 带有 Pandas 数据的叶标记。为什么没有标记出现?
- r - R扩展写入本地数据
- html - 如何将 HEAD 和 Middle 和 BOTTOM 图像设置为我网页的背景?