【问题标题】:Bind to a method in code behind绑定到代码后面的方法
【发布时间】:2011-01-06 09:47:11
【问题描述】:

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

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

我的问题是我想将TextBlock 中的文本绑定到一个不同 ItemsSource,而不是在实例化时绑定到实际ListBox 的文本。以编程方式绑定是不可能的。我尝试将TextBlock 替换为另一个ListView 并绑定到一个方法,但我无法弄清楚如何使用ObjectDataProvider 并绑定到我后面代码中的一个方法(其中包含一个返回的方法我也想绑定的东西的列表),但也遇到了问题。

如果我不清楚,请一步一步快速完成:

  • 我有一个ListView 模板,它为每条记录添加了一个额外的行

  • 这个ListView 将被绑定到(比如说)一个 Foo 对象的集合。

  • 问题是我想将额外的行绑定到与主 ListView 完全不同的 itemsource。看来我不能从我的模板中做到这一点:/

那么 - 有没有办法直接绑定到我在后面的代码中定义的方法的结果,我可以在模板中引用它?

【问题讨论】:

    标签: .net wpf data-binding listview controltemplate


    【解决方案1】:

    好的,就是这样:

    1) 使用这样的项目模板创建绑定到Foo 的列表框:

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

    2) 使用这样的项目模板创建绑定到completely different itemsource 的列表框:

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

    3) 在第二个列表框后面绘制第一个列表框。

    如果物品数量相同(据我了解,这是您的情况),您将获得您想要的视觉效果。 希望对您有所帮助。

    编辑
    此方法与您当前的模板不对应,但它是一种解决方案。

    【讨论】:

    • 如果你要走这条路,你还需要担心列表框的样式,这样覆盖不明显,以及同步选择,以便在第一个列表框中选择一个项目清除第二个中的选择。如果您想要键盘可访问性,您将需要一些奇特的逻辑......
    • 是的,当然,尼古拉斯·阿姆斯特朗是对的,但并不像乍一看那么复杂。
    • 键盘功能根本不是问题,但我知道这有多困难。我从来没有想过我应该开始编辑我的初始设计以使事情变得更容易。
    猜你喜欢
    • 2018-05-08
    • 2011-02-02
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 2016-02-22
    • 2011-01-22
    相关资源
    最近更新 更多