Laden...

Standard Collection

Erstellt von NonSense vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.089 Views
NonSense Themenstarter:in
73 Beiträge seit 2006
vor 12 Jahren
Standard Collection

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 😄

1.378 Beiträge seit 2006
vor 12 Jahren

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

NonSense Themenstarter:in
73 Beiträge seit 2006
vor 12 Jahren

Ja so gehts auch aber die Buttons sollen kein teil des ViewModel sein - also bleibt nur meine Lösung. Vllt aber auch eleganter?

3.430 Beiträge seit 2007
vor 12 Jahren

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

6.862 Beiträge seit 2003
vor 12 Jahren

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.

5.299 Beiträge seit 2008
vor 12 Jahren

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.