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

C# 在一个事件中重新组合按钮事件,c#,uwp,C#,Uwp,我用6个不同的按钮做几乎相同的事情 private void VisaCreaDoc\u单击(对象发送方,路由目标) { ValidateItem(InfosPosteViewModel.CREADOC); } 私有无效VisaTravaux_单击(对象发送方,路由目标e) { ValidateItem(InfosPosteViewModel.TRAVAUX); } 私有void visaremiseuvrageir_单击(对象发送者、路由目标) { ValidateItem(InfosPost

我用6个不同的按钮做几乎相同的事情

private void VisaCreaDoc\u单击(对象发送方,路由目标)
{
ValidateItem(InfosPosteViewModel.CREADOC);
}
私有无效VisaTravaux_单击(对象发送方,路由目标e)
{
ValidateItem(InfosPosteViewModel.TRAVAUX);
}
私有void visaremiseuvrageir_单击(对象发送者、路由目标)
{
ValidateItem(InfosPosteViewModel.REMISEOUVRIR);
}
私有void VisaRemiseOuvrageExpl_单击(对象发送者,路由目标)
{
ValidateItem(InfosPosteViewModel.REMISEOUVREXPL);
}
私有void VisaMES\u单击(对象发送者,路由目标e)
{
ValidateItem(InfosPosteViewModel.MisenService);
}
私有void VisaEncodageArchivage\u单击(对象发送者,路由目标)
{
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/…
链。

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

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/…
链。

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

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

哦,是的,没有想到。这仍然是一个比我更好的解决方案。谢谢!:)哦,是的,没有想到。仍然是一个比我更好的解决方案。谢谢!:)