wpf - 在列表框项目源中时绑定(bind)到 View 模型

标签 wpf xaml mvvm binding scope

我有一个绑定(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 模型的实例,则应该具有 ItemsCollectionAVarC 同一个 View 模型中的属性。

如果是这样,那么我们可以简单地使用 RelativeSource BindingItemTemplate 访问 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/

相关文章:

c# - 命令绑定(bind)在 Flyout 或 FlyoutMenu 中不起作用

WPF/MVVM/EF - 如何绑定(bind)到实体的相关实体?

c# - WPF/Visual C# 中的自动滚动 ScrollViewer

wpf - 为什么 IsMouseOver 被识别而 MouseDown 不是(Wpf 样式触发器)?

wpf - WPF图像,如何消除模糊?

c# - 选择 ComboBox 中的项目会影响不相关的 ComboBox

wpf - 数据绑定(bind)到 WrapPanel 不能按预期工作

c# - 我这种设计WPF UI的方法对吗?

xaml - 如何在 XAML 中制作圆角三角形

c# - MVVM 卡住事件 Hook