【问题标题】:Binding the content of a ListBoxItem to something not related to将 ListBoxItem 的内容绑定到不相关的内容
【发布时间】:2013-01-23 16:22:58
【问题描述】:

我是 WPF 新手,但我非常熟悉将列表框控件绑定到视图模型中的可观察集合。

在我当前的项目中,我们有一个 ListBox,用于导航到框架框中的不同页面。我想向第一个 ListBoxItem 添加一些显示信息,以显示正在处理哪个对象(在本例中为场景)(它在前一帧中选择,在后续帧中可见)。 ListBox 本身使用 xaml 中定义的静态列表,因此它没有绑定到 ViewModel 中的任何内容。 CurrentScenario 是 ViewModel 上的一个属性。我能够将 Label 添加到包含此 ListBox 的同一窗口并成功地将 CurrentScenario.Id 绑定到其内容,并且它已正确更新,因此我知道 Binding 语句中的路径应该正确解析。

<ListBox  
  Style="{StaticResource FunctionBackground}" 
  IsSynchronizedWithCurrentItem="True" 
>
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}">
        <ListBoxItem.ContentTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <TextBlock Grid.Row="0" Text="Scenario" />
                    <TextBlock Grid.Row="1" Text="{Binding Path=CurrentScenario.Id}"/>
                </Grid>
            </DataTemplate>
        </ListBoxItem.ContentTemplate>
    </ListBoxItem>
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}" >Parameter</ListBoxItem>
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}" >Run</ListBoxItem>
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}" >Results</ListBoxItem>
</ListBox>

当我尝试将此额外信息添加到列表框项目时,据我所知,列表框项目在文本块下方有一个空文本块,其中包含“场景”一词。我不明白为什么空文本框内容没有显示绑定属性的值。当我在第二个文本块的 Text 属性中放入一个普通字符串时,它会正确显示。

我想要么 ListBoxItem 内容仅设置为绑定到与 ItemSource 相关的属性,因此它忽略了绑定到其他事物的尝试,或者我可能缺少 WPF 中的一些基本内容。或者两者都...

如果有人有任何想法,谢谢!

【问题讨论】:

    标签: wpf mvvm listboxitem


    【解决方案1】:

    因此,如果属性 CurrentScenario 在 ViewModel 中,您可以使用 RelativeSource 绑定到此属性。

    ...
    <TextBlock Grid.Row="0" Text="Scenario" />
    <TextBlock Grid.Row="1" Text="{Binding Path=DataContext.CurrentScenario.Id, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
    ...
    

    【讨论】:

    • 这完全符合您的要求。谢谢!还有一个问题,我是否需要添加这个额外的管道,因为 WPF 需要为 ListBoxItem 提供额外的方向,因为我没有以传统方式使用它?我真的希望它能够按照我的方式工作,我只是想更好地理解它。再次感谢!
    猜你喜欢
    • 2014-05-31
    • 2023-03-22
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2019-01-18
    • 2013-02-18
    相关资源
    最近更新 更多