我有一个绑定(bind)到项目集合的列表框。在列表框中,我希望能够访问我的 View 模型的属性。
VarA 和 VarB 是 itemscollectionB 的属性,并且打印得很好 VarC 是我的 View 模型中的一个属性,我希望将其与其他信息一起显示
我收到的消息是“无法在‘Item’类型的数据上下文中解析属性 VarC,我知道这是在尝试访问 Item.VarC,但我只想访问在我的 View 模型中声明的公共(public)属性 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>
最佳答案
实现此目的的一般方法是拥有一个适当的 View 模型,其中包含相关 View 所需的所有属性。现在,假设您已使用一种或另一种方法将 View 的 DataContext
设置为相关 View 模型的实例,则应该具有 ItemsCollectionA
和 VarC
同一个 View 模型中的属性。
如果是这样,那么我们可以简单地使用 RelativeSource Binding
从 ItemTemplate
访问 View 模型。假设您的 View 名为 YourView
:
{Binding DataContext.VarC, RelativeSource={RelativeSource
AncestorType={x:Type YourView}}}
看看这个,我们可以看到 RelativeSource Binding
将查找 YourView
类型的父级,然后查找名为 VarC< 的属性
在设置为其 DataContext
的对象中。
关于wpf - 在列表框项目源中时绑定(bind)到 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19905692/