我在C#和VS2010中有以下内容:
- 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,它应该基于MainViewModel的UnitDatas的ObservableCollection。 XAML中的语法到底应该将ListView项绑定到多个UserControl对象而不破坏关注点的MVVM分离?我的意思是我可以很容易地让我的ObservableCollection包含一堆UnitDataDisplay对象,但这会强制我的MainViewModel了解View详细信息。
我的MainWindow 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 :(得分:0)
一种常见的方法是使用基于模型类型(UnitData
)的隐式data templates:
<Window.Resources>
<DataTemplate DataType="{x:Type local:UnitData}">
<local:UnitDataDisplay />
</DataTemplate>
</Window.Resources>
如果您不希望列表中的每个项目都可供选择,我会将您的ListView
更改为ListBox
或ItemsControl
。
我也会认真考虑using an MVVM framework而不是上面的方法,例如Caliburn.Micro使得视图合成更加容易,以及其他许多优点。