我希望在其他UserControls(如页面或窗口)中重用我的UserControls作为DataTemplates,在此示例中在ListBox中.一切都是MVVM.
我有一个名为"CardControl"的UserControl来显示一个简单的对象"Card".卡有两个属性,"ID"和"CardImage".控件DataContext是通过XAML设置的.如果我在VS或Blend中打开此UserControl,它会向我显示我在相应ViewModel中定义的虚拟卡.
现在我有另一个名为"CardSetControl"的UserControl,它应该显示一组卡片.因此,ViewModel有一个名为"Cards"的ObservableCollection <Card>类型的属性.
这是代码:
<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>
Run Code Online (Sandbox Code Playgroud)
在阅读了大量关于MVVM和DataContext/Binding的文章之后,我仍然没有让它发挥作用.整个层次化的USerControls/DataContexts事情是如何做到最好的干净方式的呢?