Перегруппировать события кнопки в одном событии - PullRequest
0 голосов
/ 27 мая 2019

Я использую 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 ]

2 голосов
/ 27 мая 2019

Не уверен, что вам нравится "лучше", но вы можете проверить, какая кнопка была нажата в обработчике:

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

0 голосов
/ 27 мая 2019

Возможно, вы сможете избежать дублирования кода, создав команду для функции ViewModel (см. Введение в команды WPF ). Насколько я знаю, вы также можете определить CommandParameter в XAML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...