我正在尝试将GridViewColumn
绑定到带参数的方法。
我目前的XAML看起来像这样:
<ListView Margin="10" ItemsSource="{DynamicResource RemoteAgents}" Name="lvRemoteAgents" DataContext="">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Value.ID}" />
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Value.name}" />
<GridViewColumn Header="Type" DisplayMemberBinding="{Binding Value.type}" />
</GridView>
</ListView.View>
</ListView>
ID,名称和类型是ItemSource类的预定义属性。 这些属性实际上是JSON结构的字段。因此,不是绑定到我希望通过字段名称访问JSON字段的属性。在伪代码中,我看起来像这样:
<ListView Margin="10" ItemsSource="{DynamicResource RemoteAgents}" Name="lvRemoteAgents" DataContext="">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Value.GetValue('ID')}" />
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Value.GetValue('name')}" />
<GridViewColumn Header="Type" DisplayMemberBinding="{Binding Value.GetValue('type')}" />
</GridView>
</ListView.View>
</ListView>
我将 ObjectDataProvider 定义为
<ObjectDataProvider x:Key="GetValue"
ObjectType="{x:Type local:RemoteAgent}"
MethodName="GetField">
<ObjectDataProvider.MethodParameters>
<system:String>empty</system:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
现在我绑定到 OjbectDataProvider ,如下所示:
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Source={StaticResource GetValue}, BindsDirectlyToSource=True, Mode=OneWayToSource}" />
我的问题是如何将参数传递给GetValue函数。
答案 0 :(得分:0)
我认为您可以通过编写继承DynamicObject的类来实现您的目标。您应该在实现中覆盖的方法是TryGetMember。
以Here为例。一般来说,您正在“模拟”您对动态对象的函数调用,而您的情况下的XAML将如下所示:
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Value.ID}" />
其中Value是动态对象实例的路径。
另一种方法是使用IValueConverter,通过ConverterParameter传递参数。
假设您已将ValueConverter添加到资源中,代码将如下所示:
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Value,Converter={StaticRessource myConverter,ConverterParameter=ID}}" />
请记住,ConverterParameter不是DependencyProperty,因此您无法绑定它。