将 WPF 网格视图列绑定到带有参数的方法



我正在尝试将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 函数。

我认为你可以通过编写继承DynamicObject的类来实现你的目标。

以这里为例。一般来说,您正在"模拟"对动态对象的函数调用,在您的情况下,XAML 将如下所示:

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

其中值是动态对象实例的路径。

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

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

<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Value,Converter={StaticRessource myConverter,ConverterParameter=ID}}" />

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

相关内容

  • 没有找到相关文章

最新更新