2

我有一个绑定到项目集合的列表框。在列表框中,我希望能够访问我的视图模型的属性。

VarA 和 VarB 是 itemscollectionB 的属性,这些打印得很好 VarC 是我的视图模型中的一个属性,我想与其他信息一起显示

我收到的消息是“无法在‘Item’类型的数据上下文中解析属性 VarC,我理解它试图访问 Item.VarC,但我只想访问在我的视图模型中声明的公共属性 VarC

基本上我需要水平打印三个东西 itemscollectionB[i].VarA itemscollectionB[i].VarB, VarC

我怎样才能做到这一点

<ListBox Background="white" x:Name="Name"  VerticalAlignment="Stretch" 
         BorderThickness="0" ItemsSource="{Binding Path=ItemsCollectionA}" 
         Margin="0" Width="Auto" HorizontalAlignment="Stretch" >
    <ListBox.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#F0F0F0"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#F0F0F0"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
    </ListBox.Resources>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel >
                <ListBox BorderThickness="0" Margin="0" 
                        ItemsSource="{Binding Path=ItemsCollectionB}" 
                        FontFamily="Arial Black" FontSize="9" 
                        FontWeight="Bold">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock FontFamily="Arial"  
                                    Text="{Binding Path=VarA}"/>
                                <TextBlock FontFamily="Arial"  
                                    Text="{Binding Path=VarB}" Margin="5,0" />
                                <TextBlock FontFamily="Arial"  
                                    Text="{Binding Path=VarC}" Margin="0,0" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
4

2 回答 2

4

实现这一点的一般方法是拥有一个适当的视图模型,其中包含相关视图所需的所有属性。现在,假设您已DataContext使用一种或另一种方法将视图设置为相关视图模型的实例,那么您应该在同一视图模型中具有ItemsCollectionA和属性。VarC

如果是这样,那么我们可以简单地使用 aRelativeSource BindingItemTemplate. 假设您的视图称为YourView

{Binding DataContext.VarC, RelativeSource={RelativeSource 
    AncestorType={x:Type YourView}}}

看看这个,我们可以看到RelativeSource Binding将查找类型的父对象,YourView然后它将查找VarC对象中设置为它的属性DataContext

于 2013-11-11T12:27:13.403 回答
0
  <TextBlock FontFamily="Arial" Text="{Binding Path=DataContext.VarC,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Margin="0,0" />
于 2013-11-11T12:39:36.717 回答