Skip to content

Instantly share code, notes, and snippets.

@mfakane
Created December 6, 2016 16:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mfakane/ad5c9e061e6c4bd87ab48503db83f868 to your computer and use it in GitHub Desktop.
Save mfakane/ad5c9e061e6c4bd87ab48503db83f868 to your computer and use it in GitHub Desktop.
Loaded="{foo:MethodBinding BarMethod}" みたいにできるやつの作りかけ
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Windows;
using System.Windows.Markup;
namespace Test
{
[MarkupExtensionReturnType(typeof(Delegate))]
class MethodBinding : MarkupExtension
{
public string Path { get; }
public MethodCommand(string path) =>
Path = path;
public override object ProvideValue(IServiceProvider serviceProvider)
{
var targetInfo = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));
if (!(targetInfo.TargetProperty is EventInfo ei))
throw new NotSupportedException("MethodBinding must be bound to an event.");
var targetObject = (FrameworkElement)targetInfo.TargetObject;
EventHandler handler = (object sender, EventArgs e) =>
{
var dataContext = targetObject.DataContext;
// TODO: ここで Path で指定されたメソッドを呼び出したいけど . 区切りで階層辿るとか引数与えたいとか考えだしたら面倒になった
};
return Delegate.CreateDelegate(ei.EventHandlerType, handler.Target, handler.Method);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment