Question

I created a UserControl that has a ContentControl in it. This ContentControl gets Buttons from the normal .xaml-pages. But depending on some events I need to change this Button's Label or Image but i am getting a NullReferenceException.

UserControl1.xaml

<Grid>
    <!-- different Stuff that needs to be around -->
    <ContentControl Content="{Binding UserControlContent, ElementName=userContent}"/>
</Grid>

UserControl1.xaml.cs

public static readonly DependencyProperty AppBarContentProperty =
    DependencyProperty.Register("UserControlContent", typeof(Grid), typeof(UserControl1), new PropertyMetadata(new Grid()));

public Grid UserControlContent
{
    get { return (Grid)GetValue(UserControlContentProperty); }
    set { SetValue(UserControlContentProperty, value); }
}

MainPage.xaml

<local:UserControl1>
    <local:UserControl1.UserControlContent>
        <Grid>
            <Controls:RoundButton x:Name="btn1"/>
        </Grid>
    </local:UserControl1.UserControlContent>
</local:UserControl1>

MainPage.xaml.cs

MainPage()
{
    btn1.Label = "new label";
}

As soon as I try this with a button inside of the UserControl it fails. With buttons that stay outside it works. Is there any deeper binding possible to keep control of these buttons?

Was it helpful?

Solution

The trick is using the mvvm-binding!

The button's values are bound now:

Label="{Binding RoundButtons[3].Label}"
Visibility="{Binding RoundButtons[3].VisibilityState, FallbackValue=Visible}"

This allows me to define default-values and still change them on the fly as I need them to be changed.

Hope someone needs this information ;)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top