2012-11-15 72 views
0

在C#和VS2010我有以下幾點:綁定用戶控件(S)到ListView

- a MainWindow.xaml with a ListView 
- a MainViewModel with an ObservableCollection of objects of type, UnitData 
- a UnitDataDisplay.xaml with a bunch of labels tied to members of UnitData 

我需要顯示可變數目在我的ListView UnitDataDisplays應根據UnitDatas的MainViewModel的的ObservableCollection的。 XAML中的語法究竟應該如何將ListView Items綁定到多個UserControl對象,而不會中斷MVVM的關注點分離?我的意思是我可以很容易地讓我的ObservableCollection包含一堆UnitDataDisplay對象,但這會迫使我的MainViewModel瞭解View細節。

我主窗口XAML文件看起來像這樣:

<Window x:Class="ListViewTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="350"> 
    <Grid> 
     <ListView Height="234" HorizontalAlignment="Left" Margin="12,28,0,0" Name="listView1" VerticalAlignment="Top" Width="304" ItemsSource="{Binding Path=UnitDataDisplay}"/> 
    </Grid> 
</Window> 

任何幫助將不勝感激。

回答

0

一種常用方法是基於模型類型(UnitData)使用隱式data templates

<Window.Resources> 
    <DataTemplate DataType="{x:Type local:UnitData}"> 
     <local:UnitDataDisplay /> 
    </DataTemplate> 
</Window.Resources> 

然後,我會改變你的ListViewListBox,或ItemsControl,如果你不希望在每個項目列表可以選擇。

我也會認真考慮using an MVVM framework而不是上面的方法,比如Caliburn.Micro,這使得視圖組合更容易,以及許多其他優點。