Почему события и команды в MVVM так не поддерживаются WPF / Visual Studio?

Я использую этот код, и он всегда работал:

/// <summary>
/// Turn a string into a CSV cell output
/// </summary>
/// <param name="str">String to output</param>
/// <returns>The CSV cell formatted string</returns>
public static string StringToCSVCell(string str)
{
    bool mustQuote = (str.Contains(",") || str.Contains("\"") || str.Contains("\r") || str.Contains("\n"));
    if (mustQuote)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("\"");
        foreach (char nextChar in str)
        {
            sb.Append(nextChar);
            if (nextChar == '"')
                sb.Append("\"");
        }
        sb.Append("\"");
        return sb.ToString();
    }

    return str;
}
18
задан Edward Tanguay 4 June 2009 в 13:49
поделиться

5 ответов

По словам Джоша Смит статья о MVVM, она была представлена ​​миру в октябре 2005 года в блоге Джона Госсмана .

С тех пор я бы сказал, что потребовалось еще 2-3 года, чтобы WPF / MVVM действительно взлетел и был принят сообществом, но было уже слишком поздно модифицировать WPF для поддержки проблем с MVVM. Как и я'

7
ответ дан 30 November 2019 в 08:16
поделиться

Взгляните в этом шаблоне проекта MVVM для VisualStudio.

http://blogs.msdn.com/llobo/archive/2009/05/01/download-mv-vm-project-template-toolkit.aspx

С этим шаблоном вы получаете различные классы DelegateCommand, которые удовлетворяют различные потребности в ICommands, и класс CommandReference, который помогает с привязкой клавиш.

Это хорошее начало ...

0
ответ дан 30 November 2019 в 08:16
поделиться

Becuase MVVM был "изобретен" после WPF ... поэтому большие части головоломки MVVM не являются частью платформы WPF.

Не только это, но и сам MVVM был объявлен «шаблоном» еще до того, как он был даже испытан / применен в реальном мире. Что является полной противоположностью тому, что такое шаблоны - они обычно обнаруживаются и документируются после многих лет успешного использования множеством разных людей.

Один парень придумывает выкройку, а не выкройку.

2
ответ дан 30 November 2019 в 08:16
поделиться

Вы правы насчет сложности команд. Я стараюсь следовать схеме M-V-VM как можно ближе, но я не могу оправдать сложные обходные пути только для обработки простого пользовательского события.

На мой взгляд, можно обрабатывать пользовательское событие в представлении, если это значительно упрощает ваш код. Если вы обрабатываете пользовательское событие в представлении, то код-behind вашего представления должен немедленно вызвать метод на ViewModel. Таким образом, вы сохраняете свою логику во ViewModel... у вас просто есть небольшой код (обработчик событий) в View. Я знаю, что пуристы M-V-VM считают, что не должно быть никакого кода в code-behind представления, но иногда просто имеет смысл разрешить некоторый простой код, например, обработчик событий. Помните, что другим людям, возможно, придется читать/изменять ваш код в будущем, и гораздо легче понять обработчик события, чем команду делегата.

16
ответ дан 30 November 2019 в 08:16
поделиться

Рад слышать, что я не единственный, кто считает, что существующие командные реализации излишни . Привязка данных, естественно, хорошо поддерживается, но я несколько недель бился головой, пытаясь понять привязки команд для вещей, отличных от кнопок и элементов, которые от нее наследуются.

Спасибо, что разместили этот вопрос. Я думаю, что с этого момента я собираюсь обрабатывать все события на уровне представления с перенаправлением на функции модели представления. Думаю, именно так они обучали основам MVVM в одном из двухдневных курсов Microsoft XAMLFest. Достаточно хорошо для меня!

3
ответ дан 30 November 2019 в 08:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: