Laden...

CommandParameter MultiBinding richtig übergeben

Erstellt von Robin0 vor 10 Jahren Letzter Beitrag vor 10 Jahren 4.090 Views
R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren
CommandParameter MultiBinding richtig übergeben

Hallo,

Ich versuche gerade einem MenueItem.Command mehrere Parameter zu übergeben.

Mein problem ist, das der Converter bei den PropertyChanged ereignissen der gebundenen Daten schon aufgerufen wird, aber bei dem Command aufruf nicht. Ich bekomme als Parameter immer ein object[2] array mit null Daten zurück(Im Command) der Converter wird dabei nicht aufgerufen ).

Nun, wie bekomme ich die CommandParameter an den Command übergeben??

Danke für eure hilfe 😃


<MenuItem Command="{Binding CRemoveTemplate}"
                      Header="_Delete" >
                    <MenuItem.CommandParameter>
                        <MultiBinding Converter="{StaticResource mbCon}">
                            <Binding />
                            <Binding Path="SelectedIndex" ElementName="TemplateValueHost"/>
                        </MultiBinding>
                    </MenuItem.CommandParameter>
<MenueItem/>

DerConverter:


    public class MultiBindingConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
                if (parameter != null)
                {
                    Array.Resize<object>(ref values, values.Length + 1);
                    values[values.Length - 1] = parameter;
                }
            return values;
        }
}

2.207 Beiträge seit 2011
vor 10 Jahren

Hallo Robin0,

ein Command kann nur ein CommandParameter bekommen. Mach dir ein Objekt, in das du die Werte abspeicherst und gib das einfach deinem Command mit. Das ist jedenfalls sauberer und einfacher lesbar als der Converter darin.

Gruss

Coffeebean

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Hi @Coffeebean,

mir ist bewusst, dass ein Command nur ein CommandParameter bekommen kann, aus diesem grund ja auch der Converter der einfach die werte übergeben soll daraus wird dann 1 wert, undzwar ein object Array.

Aber wie geasgt mein Command bekommt ja als Parameter ein Object array mit 2 elementen... da stehen aber nur null werte drin.
[edit]
Und der Converter wird beim Commandaufruf nicht aufgerufen
[/edit]

2.207 Beiträge seit 2011
vor 10 Jahren

Hallo Robin0,

Verstehst du, was du in deinem Converter machst?

Du gibst kein Parameter mit, läufst also niemals in den If-Zweig. Somit gibst du einfach nur deine Values zurück. Aber das nur nebenbei. Kann ja gewollt sein.

Dann stimmt somit dein Binding nicht. Wir wissen nicht, was "TemplateValueHost" ist. Es sollte aber ein Element sein, was einen SelectedIndex zur Verfügung stellt. ComboBox zB?

Gruss

Coffeebean

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Achso, ja

TemplateValueHost ist ein Datagrid.
Und das mit dem Parameter hab ich mir mal ofen gelassen desshalb die abfrage.

Ich bekomme ja die richtigen Daten im Converter.

Ich bekomme nur bei meinem Command nix.

Es wär ja schoneinmal ein fortschritt, wenn ich überhaupt daten meinem Command übergeben könnte.

2.207 Beiträge seit 2011
vor 10 Jahren

Hallo Robin0,

ich vermute (und bin mir nicht sicher), dass das implizite umwandeln von object[] in dein object nicht hinhaut.

Wieso machst dus nicht so:

Injecte das VM in dein Command, und greife dann vom Command auf die Properties im VM zu.

Gruss

Coffeebean

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Ne, ich will schon daten übergeben ist auch sehr übersichtlich mit nem Multibinding, ich werd mir mal die convertierung anschaun.

Ja...
hab jetz


.
.
.

List<object> output = new List<object>();
            output.AddRange(values);

return output;

verwendet und das funktioniert, warum das anders nich geht kein schimmer XD.

5.657 Beiträge seit 2006
vor 10 Jahren

Hi Robin0,

die Doku zu Array.Resize sagt:

Wenn array null ist, erstellt diese Methode ein neues Array mit der angegebenen Größe.

Das heißt, die Einträge im Array sind alle null.

Du solltest deinen Code unbedingt debuggen und testen, sonst stehst du immer wieder vor solchen "unerklärlichen" Problemen.

Christian

Weeks of programming can save you hours of planning

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Das Array ist ja nicht null, und im normalfall verwende ich den programmpfad auchnicht.

Der grund, dass ich die parameter hinzufüge ist einfach: "Falls ich es brauche, ist es vorhanden 😄".