我正在为 Windows Phone 使用 C# 和 Silverlight。
我有一个 ListBox listBoxOfItemsA,它的 ItemsSource 属性绑定到 ObservableCollection observableCollectionOfItemsA。ListBox 中的每个 TypeA 项都是使用 ListBox.ItemTemplate 绘制的,如 XAML 中所示。注意 Canvas 元素。没有它,一切都很好。现在,我已将 TypeA 的每个实例与 0 个或多个 TypeB 实例相关联。TypeB 的每个实例都定义了一个 HighlightColor。对于 ListBox 中的每个 TypeA 项目,我需要某种方式来显示与其关联的所有 TypeB 项目的 HighlightColor。我正在考虑为每个 ListBox 项目添加一个薄 Canvas 元素,将其水平划分为 0 个或多个区域(0 只会留下黑色背景),并在该 Canvas 中绘制与 TypeB 实例相关联的矩形ListBox 项(以便所有这些矩形的总宽度不变)。
问题:我必须在“????”处写什么 位置,以便我可以将 Canvas 属性(在 TypeA 中)与 ListBox.ItemTemplate 中的 Canvas 元素绑定?
谢谢你。
编辑 20120406_0202 :每个 TypeA 实例可以同时映射到多个 TypeB 实例。例如:每个 TypeA 是货币的流动(从一个账户到另一个账户,在某个日期,属于某个类别等),每个 TypeB 是每个 TypeA 可能满足也可能不满足的一组条件(例如,它的日期在某个范围内,它的目标帐户等于某个帐户,等等)。对于每个 TypeA,我想一目了然地显示它满足哪些条件集。每套满意的颜色都会显示额外的颜色。
public class TypeA
{
public int Id { get; set; }
public string Name { get; set; }
public Canvas CanvasForItemsB {...} // I would like something like this, here, and to bind it to the Canvas element in the XAML.
}
public class TypeB
{
public SolidColorBrush HighlightColor {...}
}
ObservableCollection<TypeA> observableCollectionOfItemsA;
listBoxOfItemsA.ItemsSource =observableCollectionOfItemsA;
<ListBox x:Name="listBoxOfItemsA">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Id, Mode=OneWay}" />
<TextBlock Text="{Binding Name, Mode=OneWay}" />
<Canvas ????="{Binding CanvasForItemsB, Mode=OneWay}" Width="480" Height="10" Background="Black" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>