Если у меня есть кнопка в моем представлении с именем, скажем, «Сохранить», я могу добавить свойство «Сохранить» в свою модель представления, и Caliburn.Micro автоматически привяжет его к содержимому моей кнопки. Например:
public string Save { get { return StringResources.Save; } }
Или я могу добавить метод Save в свою ViewModel, и Caliburn.Micro выполнит этот метод при нажатии кнопки. Например:
public void Save() {
Document.Save();
}
Но что, если я хочу сделать и то, и другое? C# не позволяет мне объявлять метод и свойство с одинаковыми именами. Могу ли я использовать соглашения, чтобы как задать содержимое кнопки, так и действие, которое будет выполняться при ее нажатии?
(Я знаю, что могу вручную связать одно или другое, но я бы предпочел использовать соглашения, если это практично.)
Это общая потребность, поэтому можно подумать, что она будет встроена в Caliburn.Micro, но, похоже, это не так. Я видел некоторый код, который расширяет соглашения для поддержки этого (и я опубликую его как ответ, если не появится ничего лучшего), но это обходной путь с некоторыми причудливыми причудами, поэтому я хотел бы услышать, если кто-нибудь еще сделал эту работу более чистой.
Примечание. Я видел похожий вопрос, но, похоже, это хорошая идея или нет; Я про механику спрашиваю. (Я воздержусь от суждений о том, хорошая ли это идея, пока не увижу механику. (ухмыляется))