2

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

在我当前的项目中,我们有一个 ListBox,用于导航到框架框中的不同页面。我想向第一个 ListBoxItem 添加一些显示信息,以显示正在处理哪个对象(在本例中为场景)(它在前一帧中选择,在后续帧中可见)。ListBox 本身使用 xaml 中定义的静态列表,因此它没有绑定到 ViewModel 中的任何内容。CurrentScenario 是 ViewModel 上的一个属性。我能够将标签添加到包含此 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 中可能存在一些我缺少的基本内容。或两者...

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

4

1 回答 1

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}}"/>
...
于 2013-01-23T16:31:46.633 回答