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));
}
}
答案 0 :(得分:0)
如果您的ListBox实际上绑定到Foo(或派生)对象的集合,则绑定应如下所示:
<Setter Property="Canvas.Left" Value="{Binding StartPoint.X}"/>
<Setter Property="Canvas.Top" Value="{Binding StartPoint.Y}"/>
原因是每个ListBoxItem的DataContext被设置为ItemsSource集合中的相应数据项,即相应的Foo实例。