无法绑定itemcontainerstyle的item属性

问题描述 投票:-1回答:2

我今天晚上用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中,我只能从上下文中选择:enter image description here

我想从源(ItemsScourse SpaceObjects)中的项中进行选择,因此我可以绑定圆的X和Y坐标。我在做什么错?

c# wpf xaml itemscontrol
2个回答
0
投票
<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>

0
投票

如果XY公共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>
© www.soinside.com 2019 - 2024. All rights reserved.