从父视图模型绑定

本文关键字:绑定 模型 视图 | 更新日期: 2023-09-27 18:03:36

我有一个视图,其中有一个listbox。我有listbox绑定到ListBoxViewModel的集合,这是MainViewModel的属性。然后,我有一个dataTemplatelistbox,其中我绑定到ListBoxViewModel的属性。包含列表框的视图具有设置为mainVeiwModel的数据上下文。我怎么能绑定到MainViewModel的属性在listboxdataTemplate有它的ItemSource绑定到ListBoxVIewModels的集合?

这个comboboxlistBox datatemplate中,itemsoucrce绑定到ListBoxViewModels的集合。注意我试图绑定到MainViewModel属性以及ListBoxViewModel属性在datatemplate

      <ListBox ItemSource="{Binding Path=CollectionOfListBoxViewModelsInMainViewModel}"
           <DataTemplate>
               .....
                <ComboBox Margin="6"
                          Width="300"
                          IsEditable="True"
                          ItemsSource="{Binding Path=MainViewModelProperty}" //binding not working
                          SelectedItem="{Binding ListBoxViewModelProperty}"  //binding works
                          Text="{Binding ListBoxViewModelProperty, UpdateSourceTrigger=LostFocus}"/>   //binding works
                .....
          </DataTemplate>
       </ListBox>

从父视图模型绑定

最简单的方法:

<YOURWINDOW x:Name="MyWindow">
 <ListBox ItemSource="{Binding Path=CollectionOfListBoxViewModelsInMainViewModel}"
           <DataTemplate>
               .....
                <ComboBox Margin="6"
                          Width="300"
                          IsEditable="True"
                          ItemsSource="{Binding ElementName=MyWindow, Path=DataContext.MainViewModelProperty}"
                          SelectedItem="{Binding ListBoxViewModelProperty}"  //binding works
                          Text="{Binding ListBoxViewModelProperty, UpdateSourceTrigger=LostFocus}"/>   //binding works
                .....
          </DataTemplate>
       </ListBox>
</YOURWINDOW>

1)记住,MyWindow必须将DataContext设置为MainViewModel。你可以使用任何UI元素,不一定是Window。2)第二个解决方案是使用RelativeSource而不是ElementName。