Created
December 6, 2016 16:11
-
-
Save mfakane/ad5c9e061e6c4bd87ab48503db83f868 to your computer and use it in GitHub Desktop.
Loaded="{foo:MethodBinding BarMethod}" みたいにできるやつの作りかけ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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