如何将传递给模板的对象设置为绑定?
How to set object who pass to template, as binding?
我有数据模板:
<DataTemplate DataType="{x:Type PointCollection}">
<Polygon Stroke="Blue" Points="{Binding}"Fill="White"/>
</DataTemplate>
我需要将 PointCollection 放在多边形的点 属性 中。这是什么语法?
我使用 CompositeCollection 作为 ItemsSource,它包含不同类型的对象,所以,我不能只绑定模型的一些 属性。
这是一个使用 ListBox 来保存点集合的示例。
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type PointCollection}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Count, StringFormat=Points: {0} }"
Margin="0,0,6,0" />
<Polygon Stroke="Blue"
Points="{Binding}"
Fill="White" />
</StackPanel>
</DataTemplate>
</Grid.Resources>
<ListBox HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding AllPoints}"/>
</Grid>
现在只需加载 AllPoints 列表
AllPoints = new List<PointCollection>()
{
new PointCollection(new[] {new Point(1, 2), new Point(34, 12), new Point(12, 99)}),
new PointCollection(new[] {new Point(9, 9), new Point(8, 8)}),
};
当运行我得到这个输出
更新
I use CompositeCollection as ItemsSource, which contains objects of
different types, so, I can't just bind some property of my Model.
这里使用的是复合集合
public CompositeCollection MyCompositeCollection ...
这里是所有的数据模板
<DataTemplate DataType="{x:Type c:Ship}">
<TextBlock Text="{Binding Path=Name, StringFormat=Ship: {0}}"
Foreground="Red" />
</DataTemplate>
<DataTemplate DataType="{x:Type c:Passage}">
<TextBlock Text="{Binding Path=Name, StringFormat=Passage: {0}}"
Foreground="Blue" />
</DataTemplate>
<DataTemplate DataType="{x:Type PointCollection}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Count, StringFormat=Points: {0} }"
Margin="0,0,6,0" />
<Polygon Stroke="Blue"
Points="{Binding}"
Fill="White" />
</StackPanel>
</DataTemplate>
<ListBox ItemsSource="{Binding MyCompositeCollection}" />
结果显示三个不同的对象:
在 SO .
上使用 ObserableCollection<T>
(其中船舶和通道都具有相同的界面)查看我的回答
我有数据模板:
<DataTemplate DataType="{x:Type PointCollection}">
<Polygon Stroke="Blue" Points="{Binding}"Fill="White"/>
</DataTemplate>
我需要将 PointCollection 放在多边形的点 属性 中。这是什么语法?
我使用 CompositeCollection 作为 ItemsSource,它包含不同类型的对象,所以,我不能只绑定模型的一些 属性。
这是一个使用 ListBox 来保存点集合的示例。
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type PointCollection}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Count, StringFormat=Points: {0} }"
Margin="0,0,6,0" />
<Polygon Stroke="Blue"
Points="{Binding}"
Fill="White" />
</StackPanel>
</DataTemplate>
</Grid.Resources>
<ListBox HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding AllPoints}"/>
</Grid>
现在只需加载 AllPoints 列表
AllPoints = new List<PointCollection>()
{
new PointCollection(new[] {new Point(1, 2), new Point(34, 12), new Point(12, 99)}),
new PointCollection(new[] {new Point(9, 9), new Point(8, 8)}),
};
当运行我得到这个输出
更新
I use CompositeCollection as ItemsSource, which contains objects of different types, so, I can't just bind some property of my Model.
这里使用的是复合集合
public CompositeCollection MyCompositeCollection ...
这里是所有的数据模板
<DataTemplate DataType="{x:Type c:Ship}">
<TextBlock Text="{Binding Path=Name, StringFormat=Ship: {0}}"
Foreground="Red" />
</DataTemplate>
<DataTemplate DataType="{x:Type c:Passage}">
<TextBlock Text="{Binding Path=Name, StringFormat=Passage: {0}}"
Foreground="Blue" />
</DataTemplate>
<DataTemplate DataType="{x:Type PointCollection}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Count, StringFormat=Points: {0} }"
Margin="0,0,6,0" />
<Polygon Stroke="Blue"
Points="{Binding}"
Fill="White" />
</StackPanel>
</DataTemplate>
<ListBox ItemsSource="{Binding MyCompositeCollection}" />
结果显示三个不同的对象:
在 SO
ObserableCollection<T>
(其中船舶和通道都具有相同的界面)查看我的回答