【发布时间】:2015-01-05 22:45:28
【问题描述】:
我正在尝试开发一个数据绑定的折线画布。 目前我数据绑定了一个类列表,每个类都包含一个点集合和一个偏移量。但是,我想进一步自定义这些行中的每一个,例如它们的颜色。因此,我想在包含折线模型类的类中创建一个列表。其中包含点集合、偏移 X、Y 和折线颜色数据。
目前看起来是这样的:
<Canvas Name="PolyLineCanvas" Width ="100" Height="100">
<ItemsControl ItemsSource="{Binding WaypointList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,NotifyOnTargetUpdated=True}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Path=TracedPathLeft, UpdateSourceTrigger=PropertyChanged}"/>
<Setter Property="Canvas.Top" Value="{Binding Path=TracedPathTop, UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Polyline Stroke="Magenta" Points="{Binding TracedPath}" StrokeThickness="0.0244"></Polyline>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Canvas>
和类:
public class WaypointListModel : INotifyPropertyChanged
{
public class Waypoint : INotifyPropertyChanged
{
ObservableCollection<Waypoint> wptList;
PointCollection tracedPath;
double tracedPathTop;
double tracedPathLeft;
public Waypoint(ObservableCollection<Waypoint> WptList)
{
wptList = WptList;
}
public PointCollection TracedPath
{
get
{
return tracedPath;
}
set
{
tracedPath = value;
}
}
public double TracedPathTop
{
get
{
return tracedPathTop;
}
set
{
tracedPathTop = value;
}
}
public double TracedPathLeft
{
get
{
return tracedPathLeft;
}
set
{
tracedPathLeft = value;
}
}
public void NotifyCanvas() //Method being called when pressing an update button
{
NotifyPropertyChanged("TracedPathTop");
NotifyPropertyChanged("TracedPathLeft");
NotifyPropertyChanged("TracedPath");
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
ObservableCollection<Waypoint> waypointList = new ObservableCollection<Waypoint>();
public ObservableCollection<Waypoint> WaypointList
{
get
{
return waypointList;
}
set
{
waypointList = value;
NotifyPropertyChanged("WaypointList");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
这是我制作的 polylineModel 类(类似于上面的那个):
class WayPointPolyline : INotifyPropertyChanged
{
SolidColorBrush tracedPathColour;
PointCollection tracedPath;
double tracedPathTop;
double tracedPathLeft;
public SolidColorBrush TracedPathColour
{
get
{
return tracedPathColour;
}
set
{
tracedPathColour = value;
NotifyPropertyChanged("TracedPathColour");
}
}
public PointCollection TracedPath
{
get
{
return tracedPath;
}
set
{
tracedPath = value;
NotifyPropertyChanged("TracedPath");
}
}
public double TracedPathTop
{
get
{
return tracedPathTop;
}
set
{
tracedPathTop = value;
NotifyPropertyChanged("TracedPathTop");
}
}
public double TracedPathLeft
{
get
{
return tracedPathLeft;
}
set
{
tracedPathLeft = value;
NotifyPropertyChanged("TracedPathLeft");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
但是在名为 Waypoint 的类中
我想将 PointCollection 替换为:
public List<WayPointPolyline > TracedPaths
{
get
{
return tracedPaths;
}
set
{
tracedPaths = value;
}
}
xaml 是最困难的部分,因为目前它只为列表中添加的每个类添加一个点集合,我需要的是一个列表,您可以在其中添加 x 个类,x 类可以包含 y 行的数据。知道该怎么做吗?
提前致谢!
【问题讨论】:
-
是什么阻止您这样做并在现有的
ItemsControl.ItemTemplate中添加新的ItemsControl?