从父视图模型绑定
本文关键字:绑定 模型 视图 | 更新日期: 2023-09-27 18:03:36
我有一个视图,其中有一个listbox
。我有listbox
绑定到ListBoxViewModel的集合,这是MainViewModel的属性。然后,我有一个dataTemplate
的listbox
,其中我绑定到ListBoxViewModel的属性。包含列表框的视图具有设置为mainVeiwModel的数据上下文。我怎么能绑定到MainViewModel的属性在listbox
的dataTemplate
有它的ItemSource
绑定到ListBoxVIewModels的集合?
这个combobox
在listBox
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。