【发布时间】:2011-11-15 09:33:49
【问题描述】:
我想在其他用户控件(如页面或窗口)中重用我的用户控件作为数据模板,在此示例中是在列表框内。一切都是 MVVM。
我有一个名为“CardControl”的用户控件来显示一个简单的对象“卡片”。 Card 有两个属性,“ID”和“CardImage”。控件 DataContext 是通过 XAML 设置的。如果我在 VS 或 Blend 中打开这个 UserControl,它会显示我在相应 ViewModel 中定义的虚拟卡片。
现在我有另一个名为“CardSetControl”的用户控件,它应该显示卡片集合。所以 ViewModel 有一个 ObservableCollection
代码如下:
<ListBox x:Name="MyList" ItemsSource="{Binding CardSet.Cards}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<!-- WORKING, but not what i want -->
<TextBlock Text="{Binding ID}" /> // would display ID of Card
<Image Source="{Binding Image}" /> // would display Image of Card
<!-- NOT WORKING, but this is how i want it to work -->
<UserControls:CardControl DataContext="{Binding "Current listbox item as DataContext of CardControl???"}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在阅读了大量关于 MVVM 和 DataContext/Binding 的文章后,我仍然无法使用它。整个分层 USerControls/DataContexts 是如何以最干净的方式完成的?
【问题讨论】:
标签: binding mvvm user-controls listbox datacontext