我想在其他UserControls中重用我的UserControls,如頁面或窗口作爲DataTemplates,在本例中是一個ListBox。一切都是MVVM。用戶控件作爲ListBox中的DataTemplate
我有一個名爲「CardControl」的UserControl來顯示一個簡單的對象「Card」。卡有兩個屬性,「ID」和「CardImage」。控件DataContext通過XAML進行設置。如果我在VS或Blend中打開這個UserControl,它會顯示我在相應的ViewModel中定義的虛擬卡。
現在我有另一個名爲「CardSetControl」的UserControl,它應該顯示卡的集合。因此,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的文章噸後/綁定我仍然沒有得到它的工作。這整個分層的USerControls/DataContexts事情如何完成最好的清潔方式?
意志,我道歉我基本放棄了確切相同的答案你。我應該在下次回答之前刷新頁面;) –
這樣一個模型(Card)作爲DataContext傳遞給用戶控件。如果我想讓該用戶控件使用其視圖模型怎麼辦?我應該如何將接收到的模型傳遞給視圖模型並將視圖模型綁定到控件的視圖? –
@OndrejJanacek:UserControls不應該被設計爲擁有自己的視圖模型。他們應該在表面上擁有公共可綁定屬性,用戶將綁定到他們自己的視圖模型。對於OP而言,這個答案比最佳實踐更適合:/ – Will