绑定到ListBox ItemContainerStyle中的ListBoxItem属性

时间:2016-09-01 12:13:38

标签: c# wpf data-binding listbox

Hello stackoverflowers,

我想在ListBox的ListBoxItems上设置属性canvas.left。我试过这个:

 <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem">
                        <Setter Property="Canvas.Left" Value="{Binding Content.StartPoint.X, Mode=TwoWay, RelativeSource={RelativeSource Self}}"/>
                        <Setter Property="Canvas.Top" Value="{Binding Content.StartPoint.Y}"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="ListBoxItem">
                                    <ContentPresenter/>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
</ListBox.ItemContainerStyle>

但它说它无法解析我的datacontext中的内容属性。

我试过

<Setter Property="Canvas.Left" Value="{Binding Content.StartPoint.X}, Mode=TwoWay, RelativeSource={RelativeSource Self}}/>

但是它无法在datacontext对象中解析StartPoint。

所以我想知道如何绑定我的列表框项的属性?

编辑:我将ListBox ItemsSource绑定到ObservableCollection。视图是UserControl。

编辑2:

我的列表框绑定到从Foo派生的可观察对象集合。

Foo对象定义了StartPoint。

 public abstract class Foo: INotifyPropertyChanged
    {
      protected Point m_startPoint;

      public double Height { get; set; }

      public double Width { get; set; }

      public Point StartPoint
      {
         get { return m_startPoint; }
         set
         {
            m_startPoint = value;

            Width = Math.Abs(m_startPoint.X - m_endPoint.X);
            Height = Math.Abs(m_startPoint.Y - m_endPoint.Y);

            OnPropertyChanged(nameof(StartPoint));
            OnPropertyChanged(nameof(Width));
            OnPropertyChanged(nameof(Height));
        }
     }

1 个答案:

答案 0 :(得分:0)

如果您的ListBox实际上绑定到Foo(或派生)对象的集合,则绑定应如下所示:

<Setter Property="Canvas.Left" Value="{Binding StartPoint.X}"/>
<Setter Property="Canvas.Top" Value="{Binding StartPoint.Y}"/>

原因是每个ListBoxItem的DataContext被设置为ItemsSource集合中的相应数据项,即相应的Foo实例。