WPF : Element Visibility collapse wenn Connent == null?



  • Hallo Leute,

    ich habe mit WPF nich so viel am Hut, und hänge am folgeden Problem. Ich möchste ein "Grid" ausblenden, wenn dessen ContentControl keinen Content hat!

    WPF:

    <!-- Footer -->
    						<Grid Background="#C06BA0CF" Grid.Row="2"
    								Height="{TemplateBinding HeadlineHeight}"  
    							  Visibility="{Binding IsFooterContentSet, Converter={StaticResource trueVisibleConverter}}">
    
    							<Grid.RowDefinitions>
    								<RowDefinition Height="2" />
    								<RowDefinition />
    							</Grid.RowDefinitions>
    							<controls:SeparatorLine Grid.Row="0" Grid.ColumnSpan="100" Opacity="0.5" />
    							<ContentControl x:Name="footerContentControl" Grid.Row="1" 
    											Content="{TemplateBinding FooterContent}" />
    						</Grid>
    

    Habe einen VisibilityConverter (der schon woander verwendet wird, also an dem kann es nich liegen) verwendet, welcher auf eine "IsFooterContentSet" Property im Codebehind schaut, welches so aussueht:

    public bool IsFooterContentSet
    		{
    			get
    			{
    				return ((object)GetValue(FooterContentProperty) != null);
    			}
    		}
    
    		public object FooterContent
    		{
    			get { return (object)GetValue(FooterContentProperty); }
    			set { SetValue(FooterContentProperty, value); }
    		}
    // Using a DependencyProperty as the backing store for HeadlineContent.  This enables animation, styling, binding, etc...
    		public static readonly DependencyProperty FooterContentProperty =
    			DependencyProperty.Register("FooterContent", typeof(object), typeof(Table),
    			new UIPropertyMetadata(null));
    

    Aber es klappt nich, d.h. ich müsste antriggern, OnPropertyChangd vom "IsFooterContentSet" wenn das FooterConent sich ändernt!?! abe wie?

    Danke und grüße


  • Administrator

    UIPropertyMetadata(Object defaultValue, PropertyChangedCallback propertyChangedCallback)

    Einfach ein Callback mitgeben. In diesem löst du dann das PropertyChanged Event für IsFooterContentSet aus.



  • Danke für den Tipp! Aber es klappt nich, das Proiperty IsContentSet wird irgendwie nich gebunden, selbst wenn ich da hardcodiert "false" eintrage!

    Lieg es daran, dass der WPF kram als style für meine Klasse Table verpackt ist und in Setter=> also DataTemplate gesetzt wird! Irgendwie hab ich das gefühö dass das Property nich gebunde ist! Ist im Codebehind auch noch so "grau" statt "schwarz" was ja bedetuet, dass es nich verwendet wird,.!?

    Grüé und danke



  • Gelöst:)

    Das binding muss so aussehen:

    Visibility="{Binding IsFooterContentSet,
    									Converter={StaticResource trueVisibleConverter},
    									RelativeSource={RelativeSource TemplatedParent}}
    

    das ich auf ein template binde:

    Style x:Key="{x:Type controls:Table}" TargetType="{x:Type controls:Table}">
    		<Setter Property="HeadlineHeight" Value="78" />
    		<Setter Property="Template">
    

    naja whatever, WPF is nich mein fall, verstanden hab ich es nich, aber es geht:)


Log in to reply