2016-08-04 27 views
-1

Ich habe Probleme beim Binden der Sichtbarkeit eines ContentPresenters. Ich habe ein minimales Beispiel Fenster:WPF ContentPresenter konnte nicht gebunden werden Sichtbarkeit

In meinen Ressourcen ich die folgenden Datatemplate

definiert
<DataTemplate x:Key="MyTemplate"> 
    <Border Width="50" Height="50" Background="Red"/> 
</DataTemplate> 

Das Fenster enthält nur Stackpanel von einer roten und grünen gefüllt Grenze.

<StackPanel> 
    <ContentPresenter ContentTemplate="{StaticResource MyTemplate}" Visibility="{Binding Vis}"/> 
    <Border Width="50" Height="50" Background="Green" Visibility="{Binding Vis}"/> 
</StackPanel> 

Die Sicht ist im Datacontext verfügbar:

private Visibility _Vis; 
public Visibility Vis 
{ 
    get 
    { 
     return _Vis; 
    } 
    set 
    { 
     _Vis = value; 
     OnPropertyChanged(nameof(Vis)); 
    } 
} 

Anzeigen der Fenster, die beiden Grenzen sind untereinander dargestellt. Jetzt das Problem: Wenn ich die Sichtbarkeit ändern (OnPropertyChanged verwendet), ändert nur der grüne Rand die Sichtbarkeit. Der rote Rahmen, der das ContentTemplate verwendet, ändert seine Sichtbarkeit nicht. Beide Controls sind jedoch an die gleiche Eigenschaft gebunden!

  • Ich versuchte es mit Collapsed und Hidden - kein Unterschied
  • Ich habe auch versucht DataContext={Binding} zum Content Zugabe - keinen Unterschied

Was ist das Problem ein Content und binde Es ist die Verwendung von Sichtweite?

Vielen Dank für Ihre Antworten!

+0

ContentPresenter ist manchmal etwas Besonderes - können Sie es durch ein ContentControl ersetzen (Inhalt explizit binden, wenn Sie müssen) und sehen, ob es besser funktioniert? –

Antwort

1

ich war in der Lage zu reproduzieren, was Sie sehen, und ich war in der Lage, es zu beheben durch die ContentPresenter zu einem ContentControl Wechsel:

<StackPanel> 
    <ContentControl 
     ContentTemplate="{StaticResource MyTemplate}" 
     Visibility="{Binding Vis}" 
     /> 
    <Border 
     Width="50" 
     Height="50" 
     Background="Green" 
     Visibility="{Binding Vis}" 
     /> 
</StackPanel> 

ContentPresenter ein wenig komisch. Andere haben das gleiche Problem wie du. In der Regel, wenn ich irgendwelche Eigenschaften auf das Ding setze, wechsle ich stattdessen zu ContentControl. Ich nehme an, Sie müssen jetzt Content explizit auf die ContentControl binden, die ich hoffe, wird nicht zu viel Mühe sein.