Я хочу повторно использовать мои UserControls в других UserControls, таких как страница или окно, как DataTemplates, в этом примере внутри ListBox. Все это MVVM.
У меня есть UserControl, называемый CardControl, для отображения простого объекта "Карточка". Карта имеет два свойства: "ID" и "CardImage". Элементы управления DataContext устанавливаются через XAML. Если я открою этот UserControl в VS или Blend, он покажет мне фиктивную карту, которую я определил в соответствующей ViewModel.
Теперь у меня есть еще один UserControl, называемый "CardSetControl", который должен отображать коллекцию карт. Таким образом, ViewModel имеет одно свойство типа 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>
Прочитав массу статей о MVVM и DataContext/Binding, я все равно не смог его работать. Как все целые иерархические объекты USerControls/DataContexts выполняются наилучшим образом?