2012-04-05 10 views
0

Ich verwende C# und Silverlight für Windows Phone.Wie binden Sie ein Canvas-Element in XAML an eine Canvas-Eigenschaft im Code dahinter?

Ich habe eine ListBox listBoxOfItemsA, deren ItemsSource-Eigenschaft an eine ObservableCollection ObservableCollectionOfItemsA gebunden ist. Jedes TypeA-Element in der ListBox wird mithilfe einer ListBox.ItemTemplate wie im XAML angezeigt. Beachten Sie das Canvas-Element. Ohne es war alles in Ordnung. Jetzt habe ich jede Instanz von TypeA mit 0 oder mehr Instanzen von TypeB verknüpft. Jede Instanz von TypeB definiert eine HighlightColor. Ich brauche einen Weg für jedes TypeA-Element in der ListBox, um die HighlightColor-Elemente aller TypeB-Elemente anzuzeigen, die damit verknüpft sind. Ich dachte daran, jedem ListBox-Objekt ein dünnes Canvas-Element hinzuzufügen, es in 0 oder mehr Regionen horizontal zu teilen (0 würde einfach den schwarzen Hintergrund belassen) und in diesem Canvas so viele Rechtecke zu zeichnen, wie Instanzen von TypeB damit verbunden sind ListBox-Element (so dass die Gesamtbreite all dieser Rechtecke konstant ist).

Frage: Was muss ich beim "????" schreiben? Position, damit ich die Canvas-Eigenschaft (in TypeA) mit dem Canvas-Element in der ListBox.ItemTemplate binden kann?

Vielen Dank.

bearbeiten 20120406_0202: Jede TypeA Instanz kann auf mehr als eine TypeB Instanzen zugleich abgebildet werden. Zum Beispiel: Jeder TypA ist eine Geldbewegung (von einem Konto zu einem anderen Konto, an einem bestimmten Datum und zu einer bestimmten Kategorie usw.), und jeder TypB ist eine Menge von Bedingungen, die jeder TypA erfüllen kann oder nicht (zum Beispiel ist sein Datum innerhalb eines bestimmten Bereichs, sein Zielkonto ist gleich einem bestimmten, usw.). Für jeden Typ A möchte ich auf einen Blick zeigen, welche Bedingungen erfüllt sind. Jeder zufriedene Satz wird mit einem zusätzlichen Stück Farbe angezeigt.

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> 

Antwort

0

Wenn Sie versuchen, das Element (e) in Ihrem listbox zu markieren, wäre es wahrscheinlich einfacher sein, nur eine Grenze zu setzen um die Stackpanel in Ihrem ItemTemplate und dann eine Bindung auf den Hintergrund der Grenze einrichten Eigentum. Dann müssen Sie sich keine Gedanken mehr darüber machen, eine Menge Canvas-Objekte im Speicher abzulegen oder sie in Ihre ListBox zu injizieren.

+0

KodeKreachor, jedes Element in listBoxOfItemsA kann mehr als eine Farbe zugeordnet werden. – Telaclavo

+0

Cool, so scheint es, als ob Sie nur den Pinselfarbenwert der Hintergrundfarbeneigenschaft im Ansichtsmodell Ihres Listenelements ändern könnten und dann würde die Ansicht diese aktualisierte Farbe widerspiegeln. – KodeKreachor

+0

Ich meine mehr als eine Farbe zur gleichen Zeit. – Telaclavo

Verwandte Themen