2011-02-04 14 views
5

Ho uno strano problema con l'associazione di una proprietà booleana alla proprietà Visibility di una vista.Regolare la proprietà Visibility di una vista non funzionante

Ho una vista "principale" che contiene una serie di altre viste e vari altri elementi di ottimizzazione, inclusi pulsanti, caselle di testo, griglie, StackPanel e alcuni controlli di telegramma. Alcuni dei controlli hanno la visibilità legata alle proprietà booleane sul mio ViewModel, in modo tale che quando la proprietà è positiva vengono mostrati e quando sono negativi vengono compressi.

<Border Visibility="{Binding IsSectionShown, 
       Converter={StaticResource BoolToVisibilityConverter}}" > 

Questo funziona perfettamente per me. Ovvio, ho attivato l'evento di notifica nel setter IsSectionShown e la visibilità del controllo è stata modificata di conseguenza.

Ora ho una vista che deve essere regolata per la sua visibilità. L'implementazione ovvia è

<vw:ActivityView DataContext="{Binding Activity}" 
       Visibility="{Binding IsPositive, 
         Converter={StaticResource BoolToVisibilityConverter}}" /> 

Non funziona! Il mio lavoro è quello di avvolgere intorno mio punto di vista all'interno di uno StackPanel e regolare la visibilità del StackPanel - e questo funziona bene:

<StackPanel Visibility="{Binding IsPositive, 
       Converter={StaticResource BoolToVisibilityConverter}}"> 
    <vw:ActivityView DataContext="{Binding Activity}" /> 
</StackPanel> 

Tutte le idee quanto a perché questo sta accadendo? La soluzione è buona, ma mi piacerebbe identificare il divario nella mia comprensione.

risposta

2

Affinché entrambi funzionino, la proprietà IsPositive deve esistere sia all'interno di Activity sia a un livello superiore nel contesto dati da cui proviene Activity. Ma probabilmente non è quello che intendevi. Invece, è possibile utilizzare qualcosa di simile in modo che la visibilità viene da un contesto dati diverso da quello che si applica alla vista stessa:

<vw:ActivityView DataContext="{Binding Activity}" 
       Visibility="{Binding IsPositive, ElementName=ParentElement, 
         Converter={StaticResource BoolToVisibilityConverter}}" /> 

dove ParentElement è l'elemento principale che contiene vw:ActivityView.

+0

Naturalmente! Grazie –

Problemi correlati