MVVM视图绑定

时间:2011-07-08 22:20:09

标签: silverlight mvvm binding

让我们说我有一个项目清单。所以我有2个视图:ListView和ItemView。

我还有2个ViewModel:ListViewModel和ItemViewModel。

在ListViewModel中,我创建并初始化ItemViewModels的ObservableCollection。 在ListView中,我有ListBox和ItemTemplate - > ItemView和ItemSource绑定到ObservableCoolection到ListViewModel。 我想将每个ItemView绑定到每个ItemViewModel,这样我就可以使用绑定到ItemView.xaml,但我无法实现它。

1 个答案:

答案 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>

无论哪种方式都应该有效:)