2009-07-07 4 views

risposta

17

È necessario un convertitore personalizzato. Date un'occhiata a article

1

Qualcosa potrebbe essere stato aggiunto in SP1, ma il modo in cui l'ho raggiunto in passato è con un ValueConvertor che converte il valore in un valore booleano.

Nell'esempio il convertitore restituirebbe true se il valore era> 25, falso altrimenti. Se questo non ha senso, posso dare un esempio :-)

4

Non senza codice. La pratica corrente è:

  • Quando si lavora con gli elementi dell'interfaccia utente, creare un IValueConverter e associare alla proprietà utilizzando il convertitore.
  • Quando si lavora con dati associati, creare una proprietà bool sui dati e attivare da tale proprietà.
+0

Mi piace l'idea di utilizzare un convertitore anche con dati associati. Quando si utilizza il pattern MVVM, è possibile mantenere il codice di visualizzazione fuori dal modello viewmodel. –

29

È possibile utilizzare un trigger di dati e impostare RelativeSource di associazione su Self. I trigger di dati consentono il binding e le associazioni consentono di avere convertitori.

Esempio:

<Button Content="I change colour depending on my width for some reason"> 
     <Button.Triggers> 
      <DataTrigger 
       Binding="{Binding 
       Path=Width, 
       RelativeSource={RelativeSource Self}, 
       Converter={StaticResource isLessThanConverter}, 
       ConverterParameter=50}" 
       Value="True"> 
       <Setter Property="Button.Background" Value="Red" /> 
      DataTrigger> 
     Button.Triggers> 
    Button> 

Reference

+3

+1 per indicare l'approccio isLessThanConverter con ConverterParameter. – cplotts

+2

In Binding, invece, dovrebbe essere usato 'ActualWidth' perché la proprietà' Width' è 'NaN' se non impostata in modo esplicito. – pogosama