将UserControl绑定到ListView

时间:2012-11-15 23:08:13

标签: c# wpf xaml

我在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>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

一种常见的方法是使用基于模型类型(UnitData)的隐式data templates

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

如果您不希望列表中的每个项目都可供选择,我会将您的ListView更改为ListBoxItemsControl

我也会认真考虑using an MVVM framework而不是上面的方法,例如Caliburn.Micro使得视图合成更加容易,以及其他许多优点。