让我们说我有一个项目清单。所以我有2个视图:ListView和ItemView。
我还有2个ViewModel:ListViewModel和ItemViewModel。
在ListViewModel中,我创建并初始化ItemViewModels的ObservableCollection。 在ListView中,我有ListBox和ItemTemplate - > ItemView和ItemSource绑定到ObservableCoolection到ListViewModel。 我想将每个ItemView绑定到每个ItemViewModel,这样我就可以使用绑定到ItemView.xaml,但我无法实现它。
答案 0 :(得分:2)
我从你的问题中理解你想要将ItemViewModel绑定到ItemView.xaml,而你的ListBox驻留在其他一些xaml(比如ListBox.xaml)中。您不希望在ListBox.xaml中应用与ItemViewmodel和ItemVIew相关的绑定。如果这是问题,你
可以轻松创建DataTemplate
映射来实现:
<Window
xmlns:vw="namespace of your view files (i.e. xaml files. ListBox.xaml and ItemView.xaml)"
xmlns:ViewModels="namespace of your view model files (i.e. ItemViewModel.cs, ListBoxViewModel.cs)">
<Window.Resources>
<DataTemplate DataType="{x:Type ViewModels:ItemViewModel}">
<vw:ItemView />
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding Path=List of ItemViewmodel in ListBoxViewModel.cs}"
</Grid>
</Window>
然后,ItemViewModel类将与ItemView一起映射,因为它在Resources中指定,没有任何键。现在,您可以在ItemView.xaml中应用绑定。看,你不需要在这里分配ListBox的Itemtemplate,它将自动解决。如果你想要指定ItemTemplate(并且不想在资源中指定),那么写下:
<ListBox.ItemTemplate>
<DataTemplate>
<vw:ItemView />
</DataTemplate>
</ListBox.ItemTemplate>
无论哪种方式都应该有效:)