Update:
Я сделал сообщение о новой более гибкой версии методы связывания, который использует немного другой синтаксис здесь:
http://www.singulink.com/CodeIndex/post/updated-ultimate-wpf-event-method-binding
Полный код листинг доступен здесь :
https://gist.github.com/mikernet/7eb18408ffbcc149f1d9b89d9483fc19
Любые будущие обновления будут опубликованы в блоге, поэтому я предлагаю проверить их для последней версии.
Оригинал Ответ:
.NET 4.5+ теперь поддерживает расширения разметки на события. Я использовал это, чтобы создать привязки, которые могут быть использованы, как это метод:
<!-- Basic usage -->
<Button Click="{data:MethodBinding OpenFromFile}" Content="Open" />
<!-- Pass in a binding as a method argument -->
<Button Click="{data:MethodBinding Save, {Binding CurrentItem}}" Content="Save" />
<!-- Another example of a binding, but this time to a property on another element -->
<ComboBox x:Name="ExistingItems" ItemsSource="{Binding ExistingItems}" />
<Button Click="{data:MethodBinding Edit, {Binding SelectedItem, ElementName=ExistingItems}}" />
<!-- Pass in a hard-coded method argument, XAML string automatically converted to the proper type -->
<ToggleButton Checked="{data:MethodBinding SetWebServiceState, True}"
Content="Web Service"
Unchecked="{data:MethodBinding SetWebServiceState, False}" />
<!-- Pass in sender, and match method signature automatically -->
<Canvas PreviewMouseDown="{data:MethodBinding SetCurrentElement, {data:EventSender}, ThrowOnMethodMissing=False}">
<controls:DesignerElementTypeA />
<controls:DesignerElementTypeB />
<controls:DesignerElementTypeC />
</Canvas>
<!-- Pass in EventArgs -->
<Canvas MouseDown="{data:MethodBinding StartDrawing, {data:EventArgs}}"
MouseMove="{data:MethodBinding AddDrawingPoint, {data:EventArgs}}"
MouseUp="{data:MethodBinding EndDrawing, {data:EventArgs}}" />
<!-- Support binding to methods further in a property path -->
<Button Content="SaveDocument" Click="{data:MethodBinding CurrentDocument.DocumentService.Save, {Binding CurrentDocument}}" />
Просмотреть подписи метода модель:
public void OpenFromFile();
public void Save(DocumentModel model);
public void Edit(DocumentModel model);
public void SetWebServiceState(bool state);
public void SetCurrentElement(DesignerElementTypeA element);
public void SetCurrentElement(DesignerElementTypeB element);
public void SetCurrentElement(DesignerElementTypeC element);
public void StartDrawing(MouseEventArgs e);
public void AddDrawingPoint(MouseEventArgs e);
public void EndDrawing(MouseEventArgs e);
public class Document
{
// Fetches the document service for handling this document
public DocumentService DocumentService { get; }
}
public class DocumentService
{
public void Save(Document document);
}
Более подробную информацию можно найти здесь: http://www.singulink.com/CodeIndex/post/building-the-ultimate-wpf-event-method-binding-extension
Полный код класса можно получить здесь: https://gist.github.com/mikernet/4336eaa8ad71cb0f2e35d65ac8e8e161
Осторожно. System.Windows.Interactivity не входит в дистрибутив .NET. – Kugel
Вы можете найти это на законных основаниях в Интернете, я считаю, что это часть пакета Blend. –
спасибо за помощь, которую я начинаю куда-то забирать, эксплоит поражает мою ICommand, но не входит в разделы get {} или set {}, любая идея как это исправить? –