Come posso passare un valore costante per 1 associazione in multi-associazione?


97

Ho un multi-binding come

<TextBlock>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource myConverter}">
            <Binding Path="myFirst.Value" />
            <Binding Path="mySecond.Value" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

E voglio passare un valore fisso, ad esempio "123", a uno dei due collegamenti sopra. Come posso farlo usando XAML?


1
eventuali frammenti di codice / esempi per favore?
Torsten

Penso che manchi una parte della domanda, ti riferisci al legame sopra ma non vedo alcun codice vincolante nella domanda.
akjoshi

1
In qualche modo, ogni volta che ho una domanda, qualcuno aveva esattamente la stessa domanda in precedenza :) Fantastico!
Ignacio Soler Garcia

1
Un quarto modo per farlo sarebbe quello di utilizzare questa risposta: stackoverflow.com/a/2552911/222134
Johny Skovdal

Risposte:


146

Se il tuo valore è semplicemente a string, puoi specificarlo come costante nella Sourceproprietà di un'associazione. Se si tratta di qualsiasi altro tipo di dati primitivo, è necessario definire una risorsa statica e fare riferimento a essa.

Definisci lo sysspazio dei nomi nella radice del XAML a cui puntare Systemin mscorlib e quanto segue dovrebbe funzionare:

<TextBlock>
  <TextBlock.Resources>
    <sys:Int32 x:Key="fixedValue">123</sys:Int32>
  </TextBlock.Resources>
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource myConverter}">
      <Binding Path="myFirst.Value" />
      <Binding Source="{StaticResource fixedValue}" />
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

1
@tofutim Questo perché MultiBinding non sembra avere risorse. Usa invece TextBlock.Resources ...
Martin Hennings

6
Forse dovresti aggiungere xmlns: sys = "clr-namespace: System; assembly = mscorlib" alla tua soluzione ;-)
c0d3b34n

103

Oppure, combinando le due risposte sopra:

<MultiBinding Converter="{StaticResource ScalingConverter}">
    <Binding>
        <Binding.Source>
            <sys:Double>0.5</sys:Double>
        </Binding.Source>
    </Binding>
    <Binding ElementName="TC" Path="ActualWidth" />
</MultiBinding>

Che fornisce il tipo giusto senza le risorse kludge.


1
È necessario definire lo spazio dei nomi nell'intestazione sysdel documento:xmlns:sys="clr-namespace:System;assembly=mscorlib"
Beauty

25

Non seguo abbastanza la domanda ma ci sono due opzioni:

Metti la linea <Binding Source="123" />nel tuo multibinding passerà 123 come valore limite al tuo convertitore.

Inserisci il ConverterParameter="123"tuo MultiBinding:

<MultiBinding Converter="{StaticResource conv}" ConverterParameter="123">


<Binding Source = "123" /> sembra superare DependencyProperty.UnsetValue
Josh Stribling

<Binding Source = "123" /> passa la stringa "123" invece dell'intero o del doppio che intendevo nel mio caso.
Marcel Gosselin

In IValueConverter, i parametri vengono passati come object, il che significa che è necessario eseguire il cast del valore sul tipo corretto, in modo sicuro. IValueConverter.Convert
benPearce

4

Non sto dicendo che questa sia una risposta particolarmente buona, ma ecco un altro approccio:

<Binding Path="DoesNotExist" FallbackValue="123" />
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.