在一个事件中重新组合按钮事件

时间:2019-05-27 06:59:50

标签: c# uwp

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

2 个答案:

答案 0 :(得分:2)

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

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.
    }
}

您可以使用switch pattern matching为它增添趣味,以摆脱if / else if / else if / ...链条。

答案 1 :(得分:0)

也许可以通过为ViewModel函数创建命令来避免重复代码(请参见Introduction to WPF Commands)。据我所知,您还可以在XAML中定义一个CommandParameter