在代码后台绑定方法

3

我有一个ListView的自定义控件模板,为每个记录添加了额外的一行,这个模板类似于在Window.Resources中定义的:

<ControlTemplate TargetType="ListBoxItem">
    <Border>
        <StackPanel>
            <GridViewRowPresenter>
            <TextBlock Name="myTextBlock" />
        </StackPanel>
     </Border>
     <ControlTemplate.Triggers>
         //Triggers here
     </ControlTemplate.Triggers>
</ControlTemplate>

我的问题是,我想将 TextBlock 中的文本绑定到一个与实际 ListBox 绑定的不同的 ItemsSource 上。无法通过编程方式进行绑定。我试图用另一个 ListView 替换 TextBlock 并绑定到一个方法,但我无法弄清如何使用 ObjectDataProvider 并绑定到后端代码中的方法(其中包含一个可以返回我要绑定的东西列表的方法),但在这方面遇到了问题。
快速步骤如下: - 我有一个 ListView 模板,为每个记录添加了一行额外的内容 - 这个 ListView 将绑定到(比如)一个 Foo 对象集合 - 问题是,我想将额外的行绑定到完全不同的项目源而不是主要的 ListView。似乎我无法从模板内部实现这个 :/ - 所以 - 是否有一种直接绑定到我在后台代码中定义的方法的结果的方法,我可以在模板中引用它呢?
1个回答

1

好的,这就是想法:

1)创建一个绑定到Foo的列表框,并使用以下项目模板:

-------------
| DATA HERE |
|           |
-------------

2) 创建一个列表框,该列表框绑定到完全不同的项源,并具有以下项模板:

-------------
|           |
| DATA HERE |
-------------

3)将第一个列表框放在第二个列表框后面。

如果项目数相同(据我所知,这是您的情况),您将实现所需的视觉效果。希望有所帮助。

编辑
此方法与您现有的模板不符,但它是一种解决方案变体。


如果您选择这种方法,您还需要担心样式化列表框,以便覆盖不明显,并同步选择,以便在第一个列表框中选择项目会清除第二个列表框中的选择。如果您想要键盘可访问性,您还需要一些高级逻辑... - Nicholas Armstrong
是的,当然。尼古拉斯·阿姆斯特朗说得没错,但实际上并没有看起来那么复杂。 - levanovd
键盘功能完全没有问题,但我知道那可能很困难。从来没有想过我应该开始编辑我的初始设计,以使事情更容易。 - MoominTroll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接