Grüße aus Österreich!
Sry wegen der nichtssagenden Themabezeichnung aber ich weis nicht wie ich es ausdrücken soll :S
Gibt es eine bereits eine Standard-Collection die folgendes Bewerkstelligt:
Das DP
public ObjectCollection Commands
{
get { return (ObjectCollection)GetValue(CommandsProperty); }
set { SetValue(CommandsProperty, value); }
}
// Using a DependencyProperty as the backing store for Commands. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CommandsProperty =
DependencyProperty.Register("Commands", typeof(ObjectCollection), typeof(MetroButton));
Meine dummy Collection - will ich durch eine Standard-Collection ersetzen
public class ObjectCollection : ObservableCollection<object>
{
}
Der Grund warum ich das so will:
<common:MetroButton Title="Test123" AdditionalValue="25%">
<common:MetroButton.Commands>
<common:ButtonCollection> <-- Hier möchte ich nicht meine dummy Collection sonderen die Standard-Collection
<Button Content="Blah" />
<Button Content="Blah" />
<Button Content="Blah" />
</common:ButtonCollection>
</common:MetroButton.Commands>
</common:MetroButton>
Code sagt mehr wie Tausend Worte 😄
Ich weiß nicht worauf du hinaus willst oder was dir nicht klar ist. Eine Collection an ein Collection(Dependency)Property bindet man genauso wie jedes andere Property auch.
<common:MetroButton Title="Test123" AdditionalValue="25%" Commands="{Binding DeineCollectionProperty}" />
Falls du nicht weißt woher dein Property zum Binden herkommen soll, solltest du dich mit MVVM einmal auseinandersetzen.
Lg, XXX
Ja so gehts auch aber die Buttons sollen kein teil des ViewModel sein - also bleibt nur meine Lösung. Vllt aber auch eleganter?
Hallo,
wenn du es dynamisch haben willst dann musst du es fast so machen wie von xxxprod beschrieben.
Du kannst in deinem Metro Button beim Design ja nicht wissen wie viele Buttons wirklich in dieser Liste sein werden.
Du musst halt in diesem Metrobutton die nötige Logik einbauen damit dir dieser für jedes Command einen Button anzeigt und das entsprechende Command bindet
Das ist also im Prinzip die Funktion von einem ItemsControl. Als ItemTemplate einfach den Button setzen und das Binding richtig setzen dann passt das
Gruß
Michael
Hallo,
Code sagt mehr wie Tausend Worte 😄
Nee, ganz ehrlich, was du vorhast (oder zumindest was ich denke was du vorhast) ist anhand des gezeigten total unverständlich. Und deshalb glaube ich das auch die bisherigen Antworten nicht passen.
Du meinst doch, dass du nicht explizit ne ButtonCollection erstellen willst, sondern es so schreiben möchtest oder:
<common:MetroButton.Commands>
<Button Content="Blah" />
<Button Content="Blah" />
<Button Content="Blah" />
</common:MetroButton.Commands>
bzw. vielleicht sogar so:
<common:MetroButton Title="Test123" AdditionalValue="25%">
<Button Content="Blah" />
<Button Content="Blah" />
<Button Content="Blah" />
</common:MetroButton>
Zweiteres ist trivial. Im Konstruktor die Collection initialisieren (nur durch Deklaration des DP wird die Collection ja nicht erstellt - könnte man auch in den Metadaten des DP machen, ist aber bei Collections ne ganz schlechte Idee) und in der MetroButton Klasse das ContentPropertyAttribute auf das DP setzen.
Baka wa shinanakya naoranai.
Mein XING Profil.
ich kenne keinen MetroButton - sieht mir aus wie ein von dir erstelltes Control.
Dann aber verstehe ich nicht, wieso du deinem MetroButton nicht eine passende Collection verpassen willst, OC<Button>, OC<Control> (ich weiß ja net, was rein soll).
die Buttons sollen kein teil des ViewModel sein na, sindse doch nicht, weil die Properties eines eigenen Controls gehören ja zum View, nicht zum Viewmodel.
Der frühe Apfel fängt den Wurm.