首页 > 解决方案 > 在一个事件中重新组合按钮事件

问题描述

我使用 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 调用中传递参数或类似的方法以避免“代码重复”?

标签: c#uwp

解决方案


不确定您是否更喜欢它,但您可以检查在处理程序中单击了哪个按钮:

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 / ...链条。


推荐阅读