UserControls를 다른 ListBox의 예제처럼 DataTemplates와 같은 페이지 나 창과 같은 UserControls에서 다시 사용하고 싶습니다. 모든 것이 MVVM입니다.ListBox 내 DataTemplate으로 UserControl
간단한 개체 "카드"를 표시하려면 "CardControl"이라는 UserControl이 있습니다. 카드에는 두 개의 속성, "ID"및 "CardImage"가 있습니다. 컨트롤 DataContext는 XAML을 통해 설정됩니다. 이 UserControl을 VS 또는 Blend에서 열면 해당 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에 대한 기사의 톤을 읽은 후/I가 여전히 작동하지 않았다 바인딩. 이 전체 계층 적 USerControls/DataContexts가 어떻게 가장 깨끗한 방식으로 수행됩니까?
윌, 내 사과는 내가 기본적으로 똑같은 대답을했다 : 여기
기사입니다.다음 번에 대답하기 전에 페이지를 새로 고쳐야합니다.) –이렇게하면 모델 (카드)이 DataContext로 사용자 정의 컨트롤에 전달됩니다. 뷰 모델을 사용하기 위해 해당 사용자 정의 컨트롤을 갖고 싶다면 어떻게해야합니까? 이 수신 모델을 뷰 모델에 전달하고 뷰 모델을 컨트롤의 뷰에 바인딩하려면 어떻게해야합니까? –
@OndrejJanacek : UserControls는 자체 뷰 모델을 갖도록 설계되어서는 안됩니다. 사용자가 자신의 뷰 모델에 바인딩 할 공용 바인딩 가능 속성이 있어야합니다. 이 답변은 베스트 프랙티스보다 OP를위한 것입니다./ – Will