我有一个绑定到itemscollection的列表框。在列表框中,我希望能够访问我的viewmodel的属性。
VarA和VarB是itemscollectionB的属性,它们打印得很好 VarC是我的viewmodel中的一个属性,我希望与其他信息一起显示
我给出的消息是“无法在类型'Item'的数据上下文中解析属性VarC,我理解这是试图访问Item.VarC但我只想访问我在viewmodel中声明的公共属性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>
答案 0 :(得分:4)
实现此目的的一般方法是使用适当的视图模型,其中包含相关视图所需的所有属性。现在,假设您已使用一种方法或另一种方法将视图的DataContext
设置为相关视图模型的实例,则在同一视图模型中应该具有ItemsCollectionA
和VarC
属性
如果是这样,那么我们只需使用RelativeSource Binding
即可从ItemTemplate
访问视图模型。假设您的视图名为YourView
:
{Binding DataContext.VarC, RelativeSource={RelativeSource
AncestorType={x:Type YourView}}}
观察这一点,我们可以看到RelativeSource Binding
将查找类型为YourView
的父类,然后它将在设置为的对象中查找名为VarC
的属性它的DataContext
。
答案 1 :(得分:-1)
<TextBlock FontFamily="Arial" Text="{Binding Path=DataContext.VarC,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Margin="0,0" />