Я работаю над использованием XAML для создания дерева объектов, и один из узлов выглядит следующим образом:
public class ExecuteMethod : INode
{
#region Implementation of INode
public bool Evaluate()
{
return Function != null && Function();
}
public string Name { get; set; }
private string _type;
public string Type
{
get
{
if (string.IsNullOrEmpty(_type))
{
_type = GetType().Name;
}
return _type;
}
}
#endregion
public Func<bool> Function { get; set; }
}
Моя цель - сделать как можно более чистый XAML и код, что неВ данный момент я создаю свойства оболочки для каждой функции:
public static Func<bool> Func1 { get { return Method1; } }
public static bool Method1()
{
//Do stuff here
return true;
}
, а xaml выглядит так для приведенного выше кода:
<Root
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="clr-namespace:XamlBT;assembly=XamlBT"
xmlns:d="clr-namespace:TestBT;assembly=TestBT">
<Root.Child>
<Sequence Name="sequence1" >
<ExecuteMethod Name="e1.1" Function="{x:Static d:Program.Func1}" />
<Selector Name="selector1" >
<ExecuteMethod Name="e2.1" Function="{x:Static d:Program.Func1}" />
</Selector>
</Sequence>
</Root.Child>
Я хотел бы знать, есть ли быстрый и простой способ привязать методы / функции к свойству Func, я говорю о методе, а не о значении выполняемого метода / функции.(Я могу подумать об использовании некоторой магии отражения в valueConverter или внутри узла / класса ExecuteMethod, но это просто грязно и странно) Пример того, как я хотел бы, чтобы XAML выглядел:
<Root
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="clr-namespace:XamlBT;assembly=XamlBT"
xmlns:d="clr-namespace:TestBT;assembly=TestBT">
<Root.Child>
<Sequence Name="sequence1" >
<ExecuteMethod Name="e1.1" Function="{x:Static d:Program.Method1}" />
<Selector Name="selector1" >
<ExecuteMethod Name="e2.1" Function="{x:Static d:Program.Method1}" />
</Selector>
</Sequence>
</Root.Child>
Спасибо за любую помощь заранее и извините за плохую грамматику английского языка, это не мой родной язык:)