绑定到WPF中的方法?

在这种情况下,如何在WPF中绑定到对象方法?


public class RootObject

{

    public string Name { get; }


    public ObservableCollection<ChildObject> GetChildren() {...}

}


public class ChildObject

{

    public string Name { get; }

}

XAML:


<TreeView ItemsSource="some list of RootObjects">

    <TreeView.Resources>

        <HierarchicalDataTemplate DataType="{x:Type data:RootObject}" 

                                  ItemsSource="???">

            <TextBlock Text="{Binding Path=Name}" />

        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type data:ChildObject}">

            <TextBlock Text="{Binding Path=Name}" />

        </HierarchicalDataTemplate>

    </TreeView.Resources>

</TreeView>

在这里,我想绑定到每棵树上的GetChildren方法RootObject。


EDIT绑定到ObjectDataProvider似乎无效,因为我正在绑定到项目列表,并且ObjectDataProvider需要一个静态方法,或者它创建了自己的实例并使用该实例。


例如,使用马特的答案,我得到:


System.Windows.Data错误:33:ObjectDataProvider无法创建对象。Type ='RootObject'; 错误=“构造函数的参数错误。”


System.Windows.Data错误:34:ObjectDataProvider:尝试在类型上调用方法失败;方法='GetChildren'; Type ='RootObject'; 错误='无法在目标上调用指定的成员。TargetException:'System.Reflection.TargetException:非静态方法需要一个目标。


心有法竹
浏览 858回答 3
3回答

至尊宝的传说

不知道它在您的方案中将如何工作,但是您可以使用ObjectDataProvider上的MethodName属性来使其调用特定方法(如果使用MethodParameters属性,则使用特定参数)来检索其数据。这是直接从MSDN页面获取的代码段:<Window.Resources>&nbsp; &nbsp; <ObjectDataProvider ObjectType="{x:Type local:TemperatureScale}"&nbsp; &nbsp; &nbsp; &nbsp; MethodName="ConvertTemp" x:Key="convertTemp">&nbsp; &nbsp; &nbsp; &nbsp; <ObjectDataProvider.MethodParameters>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <system:Double>0</system:Double>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<local:TempType>Celsius</local:TempType>&nbsp; &nbsp; &nbsp; &nbsp; </ObjectDataProvider.MethodParameters>&nbsp; &nbsp; </ObjectDataProvider></Window.Resources>因此,这是一个ObjectDataProvider,它在“ TemperatureScale”类的实例上调用“ ConvertTemp”方法,并传递两个参数(0和TempType.Celsius)。

慕桂英3389331

您必须绑定该方法吗?您可以将方法绑定到谁是吸气剂的属性吗?public ObservableCollection<ChildObject> Children{&nbsp; &nbsp;get&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; return GetChildren();&nbsp; &nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP