我今天晚上用MvvmLight创建了一个.NET WPF应用程序。我正在尝试在主窗口上显示几个圆圈。
我的MainWindow.xaml已绑定到MainViewModel.cs。 MainViewModel包含一个带有SpaceObjects的ObservableCollection。我正在尝试使用itemcontrols显示此集合。
<ItemsControl ItemsSource="{Binding SpaceObjects}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding }"></Setter>
<Setter Property="Canvas.Top" Value="{Binding Radius}"></Setter>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Ellipse Width="{Binding Radius}" Height="{Binding Radius}" Fill="Blue" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
在ItemTemplate中,我可以绑定到SpaceObject属性(例如Radius)。在ItemContainerStyle中,我只能从上下文中选择:
我想从源(ItemsScourse SpaceObjects)中的项中进行选择,因此我可以绑定圆的X和Y坐标。我在做什么错?
<DataGrid.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<d:Style.DataContext>
<x:Type Type="SpaceObject" />
</d:Style.DataContext>
<Setter Property="Canvas.Left" Value="{Binding }"/>
<Setter Property="Canvas.Top" Value="{Binding Radius}"/>
</Style>
</DataGrid.ItemContainerStyle>
如果X
和Y
是公共double
属性的SpaceObject
,并且SpaceObjects
返回IEnumerable<SpaceObject>
,则可以像这样绑定到这些属性:
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding X}"></Setter>
<Setter Property="Canvas.Top" Value="{Binding Y}"></Setter>
</Style>
</ItemsControl.ItemContainerStyle>