Как я могу использовать соглашения Caliburn.Micro, чтобы установить текст кнопки и ее действие? - PullRequest
3 голосов
/ 24 октября 2011

Если в моем View есть кнопка с именем, скажем, Save, то я могу добавить свойство Save в мою ViewModel, и Caliburn.Micro автоматически свяжет ее с содержимым моей кнопки. Например:

public string Save { get { return StringResources.Save; } }

Или я могу добавить метод Save в мою ViewModel, и Caliburn.Micro выполнит этот метод при нажатии кнопки. Например:

public void Save() {
    Document.Save();
}

Но что, если я хочу сделать оба? C # не позволяет мне объявлять метод и свойство с тем же именем. Могу ли я использовать условные обозначения, чтобы и задавали содержимое кнопки и действие, выполняемое при нажатии?

(я знаю, что могу связать вручную одно или другое, но я бы предпочел использовать условные обозначения, если это целесообразно.)

Это общая необходимость, поэтому вы могли бы подумать, что она будет встроена в Caliburn.Micro, но, похоже, это не так. Я видел некоторый код, который расширяет соглашения для поддержки этого (и я опубликую его как ответ, если ничего не выйдет лучше), но это обходной путь с некоторыми причудливыми причудами - поэтому я хотел бы услышать, если кто-нибудь еще сделал эту работу более чистой.

Примечание: я видел этот похожий вопрос , но, похоже, речь идет о том, хорошая это идея или нет; Я спрашиваю о механике. (Я оставляю за собой право судить, хорошая ли это идея, пока не увижу механику. (Ухмыляется))

1 Ответ

7 голосов
/ 18 апреля 2012

Быстро и грязно

<Button x:Name="Save"><TextBlock x:Name="SaveText"></TextBlock></Button>
...