質問

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?

役に立ちましたか?

解決

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 ;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top