C# 当有多个级别时,如何将视图绑定到VM包装而不是直接绑定到模型

C# 当有多个级别时,如何将视图绑定到VM包装而不是直接绑定到模型,c#,xaml,mvvm,binding,mvvm-light,C#,Xaml,Mvvm,Binding,Mvvm Light,假设我有一个这样的模型结构 Being |_ Person |_ Billing Address |_ Customer |_ Shipping Addresses (Collection) |_ etc.. |_ etc.. <Listbox ItemsSource="{Binding Being}"> <DataTemplate> <Listbox ItemSource="{Binding Pe

假设我有一个这样的模型结构

Being
|_ Person
   |_ Billing Address
   |_ Customer
      |_ Shipping Addresses (Collection)
      |_ etc..
   |_ etc..
<Listbox ItemsSource="{Binding Being}">
    <DataTemplate>
        <Listbox ItemSource="{Binding Person}">
            <DataTemplate>
                <Listbox ItemSource="{Binding Customer.ShippingAddresses}"/>
            </DataTemplate>
        </Listbox>
    </DataTemplate>
</Listbox>
我的看法是这样的

  ListBox (ItemsSource - bound to a VM wrapper of "Being")
    - DataTemplate containing ListBox2 (ItemsSource - bound to a VM wrapper of "Person")
       - DataTemplate containing ListBox3 (ItemsSource that I want to be bound to "Shipping Adresses") PROBLEM!

Im使用MVVM Light和定位器,但无法理解如何进行第三级绑定,即第三二个数据模板(ListBox3)中的“Shipping Addresss”绑定。它只允许我直接绑定到模型中的Shipping Addresses集合。但是我想在Customer的VM包装中完成,因为我需要对集合做一些事情。任何代码都有助于内部绑定

如果我理解您的模型层次结构,那么发货地址似乎是第四级(除非您的意思是抽象或零)。您应该能够像这样深入了解每个模型的成员

<Listbox ItemsSource="{Binding Being}">
    <DataTemplate>
        <Listbox ItemSource="{Binding Person}">
            <DataTemplate>
                <Listbox ItemSource="{Binding Customer}">
                    <DataTemplate>
                        <Listbox ItemSource="{Binding ShippingAddress}"/>              
                    </DataTemplate>
                </Listbox>                
            </DataTemplate>
        </Listbox>
    </DataTemplate>
</Listbox>

此外,我相信点表示法在XAML中对属性有效。所以试试这样吧

Being
|_ Person
   |_ Billing Address
   |_ Customer
      |_ Shipping Addresses (Collection)
      |_ etc..
   |_ etc..
<Listbox ItemsSource="{Binding Being}">
    <DataTemplate>
        <Listbox ItemSource="{Binding Person}">
            <DataTemplate>
                <Listbox ItemSource="{Binding Customer.ShippingAddresses}"/>
            </DataTemplate>
        </Listbox>
    </DataTemplate>
</Listbox>

如果你能发布一些代码片段,我相信可以找到解决方案