使用参数将WPF GridViewColumn绑定到方法

使用参数将WPF GridViewColumn绑定到方法,wpf,xaml,listview,gridviewcolumn,objectdataprovider,Wpf,Xaml,Listview,Gridviewcolumn,Objectdataprovider,我正在尝试将GridViewColumn绑定到带有参数的方法 我当前的XAML如下所示: <ListView Margin="10" ItemsSource="{DynamicResource RemoteAgents}" Name="lvRemoteAgents" DataContext=""> <ListView.View> <GridView> <GridViewColumn

我正在尝试将
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>
   <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>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Value,Converter={StaticRessource myConverter,ConverterParameter=ID}}" />

ID、名称和类型是ItemSource类的预定义属性。 这些属性实际上是JSON结构的字段。因此,我希望通过字段名访问JSON字段,而不是绑定到属性。在伪代码中,我将如下所示:

<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>
   <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>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Value,Converter={StaticRessource myConverter,ConverterParameter=ID}}" />

我将ObjectDataProvider定义为


空的
现在我绑定到OjbectDataProvider,如下所示:

<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Source={StaticResource GetValue}, BindsDirectlyToSource=True, Mode=OneWayToSource}" />


我的问题是如何将参数传递给GetValue函数。

我认为您可以通过编写继承DynamicObject的类来实现目标。您应该在实现中重写的方法是TryGetMember

比如说。一般来说,您正在“模拟”对动态对象的函数调用,在您的示例中,XAML将如下所示:

<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Value.ID}" />

其中Value是指向动态对象实例的路径

另一种方法是使用IValueConverter,通过ConverterParameter传递参数

假设您已将ValueConverter添加到资源中,代码如下所示:

<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>
   <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>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Value,Converter={StaticRessource myConverter,ConverterParameter=ID}}" />


请记住,ConverterParameter不是DependencyProperty,因此您无法绑定到它。

您希望通过这种方式实现什么?我不需要为JSON结构中的每个字段定义属性。如果JSON发生了变化,我所需要的就是在不触及代码的情况下改变XAML。如何做到这一点而不至少改变方法
GetField
?访问JSON字段就像字典返回JSON[fieldName];我认为这是人为的,但是你可以让你的方法
GetField
返回
Dictionary
,并创建一个转换器,它将返回
键的
,作为
转换器参数
传递。