Невозможно связать свойство элемента в itemcontainerstyle - PullRequest
0 голосов
/ 16 октября 2019

Сегодня вечером я создал приложение .NET WPF с MvvmLight. Я пытаюсь показать пару кружков в моем главном окне.

Мой MainWindow.xaml связан с MainViewModel.cs. MainViewModel содержит ObservableCollection с SpaceObjects. Я пытаюсь показать эту коллекцию, используя 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из круга. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Если 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>
0 голосов
/ 17 октября 2019
<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>
...