'Binding in WPF not propagating into usercontrol

I am new and learning WPF. I am making a demo project to learn the working of binding and dependency properties. To make it easy to understand I briefly explain this project. In solution, I have three projects. Two projects are user control and one is the main application.

This is user control for the child page

    <UserControl x:Class="DefectTracking.DefectTrace"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="1200"
             Grid.IsSharedSizeScope="True"
             Loaded="ElementGeladen"
             Name="Self">
    <UserControl.Resources>
        <ResourceDictionary Source="Resources.xaml" />
    </UserControl.Resources>

    <UserControl.Style>
        <Style TargetType="{x:Type UserControl}">
            <Setter Property="Background" Value="{StaticResource Hintergrundfarbe}"/>
        </Style>
    </UserControl.Style>

    <Grid DataContext="{Binding ElementName=Self}" Margin="4">
        <FrameworkElement x:Name="ProxyElement"/>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition/>
            </Grid.RowDefinitions>

            <!--#region Kopfzeile -->
            <Grid Grid.Row="0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition SharedSizeGroup="Ergebnisse"/>
                    <ColumnDefinition SharedSizeGroup="Name"/>
                    <ColumnDefinition SharedSizeGroup="Folgefehler" Width="*"/>
                    <ColumnDefinition SharedSizeGroup="Fehler"/>
                    <ColumnDefinition SharedSizeGroup="Aktiviert"/>
                </Grid.ColumnDefinitions>
                <TextBox Grid.Column="2" Style="{StaticResource FolgefehlerStil}" Text="FF" />
                <TextBox Grid.Column="3" Style="{StaticResource FehlerStil}" Text="Fehler"/>
                <TextBox Grid.Column="4" Style="{StaticResource FehlerStil}" Text="Aktiviert"/>
            </Grid>
            <!--#endregion-->

            <!--#region Prüfung -->
            <ItemsControl Grid.Row="1" ItemsSource="{Binding Prüfungen}" Name="Prüfungselement">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid Background="Black">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition SharedSizeGroup="Ergebnisse"/>
                                <ColumnDefinition SharedSizeGroup="Name"/>
                                <ColumnDefinition SharedSizeGroup="Folgefehler"/>
                                <ColumnDefinition SharedSizeGroup="Fehler"/>
                                <ColumnDefinition SharedSizeGroup="Aktiviert"/>
                            </Grid.ColumnDefinitions>

                            <!--#region Ergebnisse -->
                            <ItemsControl Grid.Column="0" ItemsSource="{Binding Ergebnisse}" Style="{StaticResource ErgebnisStil}" Background="Black" MouseDoubleClick="ItemsControl_MouseDoubleClick">
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <DockPanel/>
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                            </ItemsControl>
                            <!--#endregion-->

                            <!--#region Tabelle -->
                            <TextBox Grid.Column="1" Margin="10,0" MinWidth="50" Text="{Binding Path=Name}" Style="{StaticResource PrüfungsnameStil}"/>
                            <TextBox Grid.Column="2" MinWidth="40" Text="{Binding Path=Folgefehler}" Style="{StaticResource FolgefehlerStil}"/>
                            <TextBox Grid.Column="3" MinWidth="60" Text="{Binding Path=Fehler}" Style="{StaticResource FehlerStil}"  IsReadOnly="True"/>
                            <CheckBox Grid.Column="4" MinWidth="40" IsChecked="{Binding Status, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="5,0,0,0"/>
                            <!--#endregion-->

                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
            <!--#endregion-->
        </Grid>

        <!--#region Folgefehlerschieber -->
        <Canvas>
            <Thumb DragDelta="LinealVerschieben" Canvas.Left="450" Canvas.Top="0">
                <Thumb.Template>
                    <ControlTemplate>
                        <Grid>
                            <Line X1="0" Y1="0" X2="0" 
                                Y2="{Binding ActualHeight, Source={x:Reference ProxyElement}}"
                                Canvas.ZIndex="2"
                                Style="{StaticResource LinealStil}" Cursor="Hand">
                            </Line>
                            <Rectangle Width="11" Margin="0,0,20,0"
                                Height="{Binding ActualHeight, Source={x:Reference ProxyElement}}"
                                Style="{StaticResource AnfasserStil}" Cursor="Hand">
                                
                                <Rectangle.RenderTransform>
                                    <TranslateTransform X="-5" Y="0"/>
                                </Rectangle.RenderTransform>
                            </Rectangle>
                            <Label Style="{StaticResource LabelStil}" Content="{Binding Linealposition}"/>
                        </Grid>
                    </ControlTemplate>
                </Thumb.Template>
            </Thumb>
        </Canvas>
        <!--#endregion-->
    </Grid>
</UserControl>

I am just testing

 <CheckBox Grid.Column="4" MinWidth="40" IsChecked="{Binding Status, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="5,0,0,0"/>

This is the user control for the child page

    <UserControl x:Class="Demo.View.Dashboard"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Demo.View"
             xmlns:vm="clr-namespace:Demo.ViewModel"
             xmlns:dt="clr-namespace:DefectTracking;assembly=DefectTrackingControl"
             mc:Ignorable="d" 
             d:DesignHeight="900" d:DesignWidth="1600"
             >
    <UserControl.DataContext>
        <vm:DashboardViewModel/>
    </UserControl.DataContext>
    
  
    <UserControl.Resources>
        <vm:BindingProxy x:Key="proxy" Data="{Binding}"/>
        <dt:Prüfung x:Key="www"/>
    </UserControl.Resources>

    <Grid Background="White">
        <dt:DefectTrace Margin="0,0,-321,-91">
            <dt:DefectTrace.Prüfungen>
                <dt:Prüfung 
                    Status="{Binding Path=status}" />
                <dt:Prüfung Name="Stabseite" />
                <dt:Prüfung Name="Stosskappe" />
                <dt:Prüfung Name="Druckbild" 
                                            />
                <dt:Prüfung Name="Oberfläche" 
                                            />
            </dt:DefectTrace.Prüfungen>

        </dt:DefectTrace>
        <CheckBox IsChecked="{Binding state,  Mode=TwoWay,  UpdateSourceTrigger=PropertyChanged}" Margin="100,100,100,10">Test check box</CheckBox>
    </Grid>
</UserControl>

Property definition which I want to bind with checkbox but it's not propagating into a user control. If I just set true and false then it works but if I bind then it doesn't work.

Any help would be highly appreciated



Solution 1:[1]

I believe the problem here is

<UserControl.DataContext>
    <vm:DashboardViewModel/>
</UserControl.DataContext>

because that basically means using a new instance of DashboardViewModel for this particular view, so I would assume that in your code somewhere you are using a different instance of this view model in which changing the value of Status does not really matter.

If the reason is what I think it is and you want to enhance your user comfort while developing XAML files and using this to help the compiler to know the types you can use the d:DataContext something like:

d:DataContext={x:Type vm:DashboardViewModel}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Stanislav ?aja