【发布时间】:2011-07-06 00:57:12
【问题描述】:
我正在使用 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>
提前感谢您的帮助,抱歉英语语法不好,这不是我的母语 :)
【问题讨论】:
标签: wpf xaml data-binding c#-4.0 binding